android - 在 RxJava MVVM 中组合不同的源(FCM、网络、ROOM)

标签 android mvvm rx-java android-architecture-components android-livedata

我之前使用 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 都会在您订阅后自动发出更新后的用户。

以下方法可能对您有所帮助:

  1. 在你的Activity/Fragment中,订阅Flowable
  2. 收到 FCM 通知后,调用网络 api 并更新数据库。
  3. 处理更新后的数据。

无论如何,如果您需要组合来自不同 Observable 的项目集,您可以使用 zip

关于android - 在 RxJava MVVM 中组合不同的源(FCM、网络、ROOM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52015340/

相关文章:

android - Retrofit2 错误 java.io.EOFException : End of input at line 1 column 1

wpf - 我应该使用什么 MVVM 框架?

mvvm - MVVM Light和SL3命令

wpf - MVVM:通信

java - 将 observable 转换为列表

java - RxJava 既不调用 onSuccess 也不调用 onError,应用卡住

java - 如何使用弹出窗口中的另一个按钮创建一个按钮

android - ndk 构建错误 : 'string' in namespace 'std' does not name a type

android - TextToSpeech 显示空指针异常?

rx-java - RxJava订阅可观察的阻止