vki*_*ins 5 java android reactive-programming rx-java rx-java2
我是 RxJava(特别是 RxJava2)的新手,我在似乎相对简单的操作上遇到了一些麻烦。我需要从数据库中获取一些数据,遍历数据(它表示为一个列表),对每个项目执行操作,将数据包装在另一个对象中并返回。这是我到目前为止:
mDataManager
.getStuffList(id)
.flatMapIterable(listOfStuff -> listOfStuff)
.flatMap(item ->
mDataManager
.performCount(id, item.getTitle())
.doOnNext(item::setCounter)
.takeLast(1)
.map(counter -> item))
.toList()
.toObservable()
.flatMap(listOfStuff -> Observable.just(new StuffWrapper(listOfStuff));
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我的数据管理器调用永远不会完成。这个想法是,每当底层数据发生变化时,UI 也会发生变化。但是,如果没有完成这些调用, toList() 将不会发出该事件。
在 RxJava 2 中,toList返回 a Single:它相当于Observable只有一个项目的 an 。您可以通过添加 将其转换为 Observable .toObservable,但这并不经常需要。
关于您的其他变化,您的意思是什么whenever the underlying data changes?您的数据管理员会通知您数据更改吗?
编辑:如果您的mDataManager.getStuffList(id)调用返回一个Observable发出多个项目的对象(也就是说,它永远不会完成,但总是在更改后发出最新的数据集),那么您需要执行以下操作:
mDataManager
.getStuffList(id)
.flatMap(listOfStuff ->
Observable
.from(listOfStuff)
.flatMap(item ->
mDataManager
.performCount(id, item.getTitle())
.doOnNext(item::setCounter)
.takeLast(1)
.map(counter -> item)
.toList()
)
)
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2798 次 |
| 最近记录: |