我是 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));
我遇到的问题是我的数据管理器调用永远不会完成。这个想法是,每当底层数据发生变化时,用户界面也会发生变化。但是,如果不完成这些调用,toList() 将不会发出该事件。
在 RxJava 2 中,toList
返回一个Single
: 相当于Observable
恰好只有一件物品。您可以通过添加将其转换为 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()
)
)
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)