首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Flowable<List<Item>>房间获取onComplete?

如何通过Flowable<List<Item>>房间获取onComplete?
EN

Stack Overflow用户
提问于 2019-09-18 00:05:18
回答 1查看 108关注 0票数 0

我有一个Android应用程序,使用Room保存我的收藏夹。

这是我的刀:

代码语言:javascript
复制
@Query("SELECT * FROM favorites ORDER BY lastConsultation DESC")
fun getAll() : Flowable<List<Favorite>>

我想使用Flowable来使我的MainActivity在每次添加或删除收藏夹时都会收到通知。

在我的MainActivity上,我想检索我所有的收藏,并发出一个网络请求,以检查有关我的收藏的一些信息。

在我的UseCase中,我有下面这段代码来进行调用

代码语言:javascript
复制
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上的“自动通知”)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-18 04:18:48

我假设realtyRepository返回一个Single。尝尝这个。

代码语言:javascript
复制
favoritesRepository
       .getAll()
       .switchMapSingle { Flowable
           .fromIterable(it)
           .concatMapEager { realtyRepository.getRealty(it.id).toFlowable() }
           .toList()
       }

这将得到我所理解的你想要的东西,但当数据库发生变化时,你仍然会得到通知。此外,switchMapSingle将确保您正在进行的任何工作,如果在此期间发生任何数据库更新,都将被取消。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57978123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档