Room Flowable<List<Item>>如何获取onComplete?

How to obtain onComplete with Room Flowable<List<Item>>?

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

这是我的 DAO :

@Query("SELECT * FROM favorites ORDER BY lastConsultation DESC")
fun getAll() : Flowable<List<Favorite>>

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

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

在我的用例中,我有以下代码来进行调用

favoritesRepository.getAll()
        .flatMap { Flowable.just(it) }
        .concatMapEager { Flowable.fromIterable(it) }
        .concatMapEager {
            itemRepository.getItem(it.id)
                .toFlowable()
        }
        .toList()
        .toFlowable()

itemRepositoryreturns一个SinglegetItem被调用。我从我的 favoritesRepository 中检索了一个 Flowable<List<Favorite>> 并希望在发出网络请求后将每个收藏夹都放入一个项目中,我的方法返回一个 Flowable<List<Item>>

我认为添加 .flatMap { Flowable.just(it) } 会创建一个新的 Flowable,它会在项目发出后发出 onComplete(因为 Room 不会发出 onComplete)。

那段代码不起作用,onComplete 从未被调用,所以 .toList() 也没有被调用。

有没有一种方法可以在保持我的 Flowable 实现的同时实现这些调用(具有并发性,因此是 concatMapEager)(我可以使用 Single 来解决这个问题,但我会丢失 "auto notification"主要活动)?

我假设 realtyRepository returns 一个 Single。试试这个。

favoritesRepository
       .getAll()
       .switchMapSingle { Flowable
           .fromIterable(it)
           .concatMapEager { realtyRepository.getRealty(it.id).toFlowable() }
           .toList()
       }

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