我之前使用 MediatorLiveData 将来自 FCM、Room 和 Networking 的结果合并到我的存储库中。它运作良好。然而,现在我想要更多的复杂性和 RxJava 的一些额外好处。这就是我这次决定使用 RxJava 的原因。我可以将 Room 和 Networking 与 Observable.concatArrayEager(my _observables) 结合起来。 但是,我现在不知道在 FCM 推送值后如何做到这一点,以及在发生新变化后我应该如何通知我的主要可观察对象?没有关于这个问题的例子。它是关键部分。我在我的 BroadCastReceiver 中接收 FCM,然后通知我的存储库的实时数据,它通知我的 MediatorLiveData...如何使用 RxJava 做到这一点?真的很欢迎任何建议,因为这是非常重要的问题。
最佳答案
恕我直言,您不需要合并来自不同来源的数据。
使用数据库作为您的单一事实来源绝对更容易。
Room 支持 Flowable
,例如:
@Query(“SELECT * FROM Users WHERE id = :userId”)
Flowable<User> getUserById(String userId);
每当 Users
表有任何更新时,Room
都会在您订阅后自动发出更新后的用户。
以下方法可能对您有所帮助:
- 在你的
Activity/Fragment
中,订阅Flowable
。 - 收到 FCM 通知后,调用网络 api 并更新数据库。
- 处理更新后的数据。
无论如何,如果您需要组合来自不同 Observable 的项目集,您可以使用 zip
。
关于android - 在 RxJava MVVM 中组合不同的源(FCM、网络、ROOM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52015340/