我有一个Android应用程序,使用Room保存我的收藏夹。
这是我的刀:
@Query("SELECT * FROM favorites ORDER BY lastConsultation DESC")
fun getAll() : Flowable<List<Favorite>>我想使用Flowable来使我的MainActivity在每次添加或删除收藏夹时都会收到通知。
在我的MainActivity上,我想检索我所有的收藏,并发出一个网络请求,以检查有关我的收藏的一些信息。
在我的UseCase中,我有下面这段代码来进行调用
favoritesRepository.getAll()
.flatMap { Flowable.just(it) }
.concatMapEager { Flowable.fromIterable(it) }
.concatMapEager {
itemRepository.getItem(it.id)
.toFlowable()
}
.toList()
.toFlowable()当调用getItem时,itemRepository返回一个Single。我从我的favoritesRepository中检索了一个Flowable<List<Favorite>>,并希望在发出网络请求后将每个收藏夹都变成一个项目,我的方法返回一个Flowable<List<Item>>
我认为添加.flatMap { Flowable.just(it) }将创建一个新的Flowable,它将在项发出后发出onComplete (因为Room不会发出onComplete)。
这段代码不工作,onComplete永远不会被调用,所以.toList()也不会被调用。
有没有一种方法可以实现这些调用(使用并发,因此使用concatMapEager),同时保持我的可流动的实现(我可以使用单个来解决这个问题,但我会失去MainActivity上的“自动通知”)?
发布于 2019-09-18 04:18:48
我假设realtyRepository返回一个Single。尝尝这个。
favoritesRepository
.getAll()
.switchMapSingle { Flowable
.fromIterable(it)
.concatMapEager { realtyRepository.getRealty(it.id).toFlowable() }
.toList()
}这将得到我所理解的你想要的东西,但当数据库发生变化时,你仍然会得到通知。此外,switchMapSingle将确保您正在进行的任何工作,如果在此期间发生任何数据库更新,都将被取消。
https://stackoverflow.com/questions/57978123
复制相似问题