【发布时间】:2020-01-18 13:07:15
【问题描述】:
我有一个使用 Room 来保存我的收藏夹的 Android 应用。
这是我的 DAO:
@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()
itemRepository 在调用getItem 时返回Single。我从我的favoritesRepository 检索Flowable<List<Favorite>> 并希望在发出网络请求后将每个收藏夹转入一个项目,我的方法返回一个Flowable<List<Item>>
我认为添加 .flatMap { Flowable.just(it) } 会创建一个新的 Flowable,一旦项目发出就会发出 onComplete(因为 Room 不会发出 onComplete)。
那段代码不起作用,永远不会调用 onComplete,因此也不会调用 .toList()。
有没有一种方法可以实现这些调用(并发,因此 concatMapEager),同时保持我的 Flowable 实现(我可以使用 Single 来解决问题,但我会失去 MainActivity 上的“自动通知”)?
【问题讨论】:
标签: android rx-java2 android-room