Android Room和Firebase在MVVM架构中-离线第一应用程序



Android Room Database可以用作(离线/本地数据源)和Firebase数据库作为(在线数据源)在MVVM存储库中(将数据粘合在一起),参见下图。具有相同的数据库表和列设置。该应用程序可以离线使用并进行更改,然后在互联网可用时在firebase上同步修改后的版本。

图1:MVVM ROOM FIREBASE图
图2:Repository上的数据层

问题:我已经有一个房间数据库以下MVVM架构,但不知道如何集成firebase作为我的在线数据源和同步表。

知道:Android的Room数据库是SQL数据库,而Firebase的Realtime数据库是NoSQL数据库。

如果这是可能的,如何将firebase设置为连接到简化版本或我可以遵循的文章中的存储库的在线数据源?或者是否存在另一种方法,其中建议使用数据库?

Android房间数据库可以用作(离线/本地数据源)和Firebase数据库作为(在线数据源)在MVVM存储库?

当然可以,但是我看不出你为什么要那样做。为什么?因为实时数据库有它自己的离线持久化机制。这意味着即使用户设备暂时失去网络连接,应用程序也将继续工作。除此之外,当设备离线时,所有缓存的数据都是可用的,当互联网连接恢复时,Firebase重新发送任何写。

应用程序可以离线使用并进行更改,然后在互联网可用时在firebase上同步修改后的版本。

如果您使用下面的代码行启用磁盘持久性,您将准确地描述实时数据库是如何工作的。

FirebaseDatabase.instance.setPersistenceEnabled(true);

如果这是可能的,如何将firebase设置为连接到简化版本或文章中的存储库的在线数据源?或者是否存在另一种方法,其中建议使用数据库?

我不明白你为什么要增加额外的复杂性,当实时数据库已经为你处理了。然而,如果你仍然想要那样做,那么你必须在ViewModel类中检查设备是否连接到互联网。根据连接状态,您应该从实时数据库或从房间请求数据。

下面是一些有用的链接:

  • 如何在Jetpack撰写中使用Kotlin流从房间读取数据?
  • 如何使用get()从Firebase实时数据库读取数据?

如果您考虑在某个时间点尝试使用Cloud Firestore,那么我还建议您阅读以下资源:

  • 如何读取数据从云Firestore使用get()?

请记住,在Cloud Firestore中,对于Android和Apple平台,离线持久性是默认启用的。

最新更新