将 Android Room 数据库与 Firebase 实时数据库相关联

Posted

技术标签:

【中文标题】将 Android Room 数据库与 Firebase 实时数据库相关联【英文标题】:Link Android Room Database with Firebase Realtime Database 【发布时间】:2018-10-02 23:30:15 【问题描述】:

我正在使用 Android Room Database 为我的 android 应用程序创建数据库。它在本地非常适合我,但我无法链接到服务器以使其也在线。 我正在使用 Firebase 进行身份验证。我正在尝试使用 Firebase 实时数据库 从 Room 中保存整个数据库对象,并根据经过身份验证的用户在应用启动时加载正确的数据库。

我想问这是否可能?如果我可以保存整个 Room 数据库实例,或者我需要在 Firebase 上重新创建数据库并逐项保存我的数据?

我似乎也无法访问 Room 的数据库数据,因为当我获得 AppDatabase 类的对象时,它并没有真正传递数据。而且我不知道应该如何做相反的事情,将稍后从 Firebase 检索到的数据分配给保存的本地数据?

此外,如果 Firebase 无法使用,您对我可以与 Room 一起使用的其他服务器有什么建议吗?

【问题讨论】:

嗨,皮埃尔·加利!几周以来,我一直在寻找如何将 Android Room DatabaseFirebase 实时数据库 结合在一起,但我只找到了单独的示例。您能就如何完成这项任务提出任何建议吗? 嗨,艾莉顿!根据我的研究(我不确定我是否仍然是最新的),但没有办法将它们联系在一起。正如我所做的(根据我在下面的回答),我只是使用 Firebase 从头开始​​重新创建了数据库。 【参考方案1】:

经过大量研究并拼命寻找答案,我得出了以下结论:

Firebase 已经有了一种直接的方式来创建数据库并在线托管它。 (我已经创建了我的数据库,所以想节省时间,但是使用 Firebase 实时数据库从头开始创建它要快得多) 如果您打算保存数据库本地和离线,房间​​数据库非常完美(截至发布日期)

【讨论】:

请记住,Firebase 实时数据库还提供持久性(离线)存储,可以像 Room 数据库一样无缝工作。在您的应用程序类 [Manifest file -> Application -> android:name] 中添加以下行以立即启动此过程。 /* Enable disk persistence */ FirebaseDatabase.getInstance().setPersistenceEnabled(true); @PravyNandas 是的,我发现这也是一个选项,它对我来说非常有用,因为我需要在线和离线一起工作!但是,当我只需要一个离线数据库时,Room 对我来说更容易使用!感谢您指出:) 我有一个类似的任务。我打算将 Room 用作本地存储,但我也需要同步/备份功能。为此,我将在 Firebase 中使用复制日志。它是一个单一的集合,具有房间数据的“平面”表示。 如果您只需要平面表示,那绝对是一个不错的选择。感谢分享! 嗨@PierreGhaly,我也遇到了同样的情况,看到了你的帖子。目前我正在使用 ROOM Sql 数据库、DAO、RxJava Observables 和 LiveData。当您切换到 Firebase 时,您是如何处理这个问题的?【参考方案2】:

我创建的类似项目使用

    对登录用户的 Firebase 身份验证 使用 Room 将用户注释保存和缓存到 sql lite 数据库 将用户注释保存到 Firebase 基础数据库

✍️ 简单的笔记制作应用使用 Sqllite Room ? 缓存笔记和 ? Firebase 数据库进行在线存储

https://github.com/LanguageXX/Simple-Note-App-with-Online-Storage

希望对你有帮助

【讨论】:

我检查了你的代码,我认为它有点错误。您正在将数据从 View Controller 层保存到 Firebase RTDB。不应将其更改为 FirebaseRepository 之类的内容。我希望你更新你的代码,让它成为其他人的一个很好的参考:)【参考方案3】:

我认为他们不需要将您的 Room 数据库与 Firebase 实时数据库连接起来,因为,首先尝试解决这个问题,我们为什么要使用 Room 数据库?因为当我们没有互联网时,我们可以从 Room 数据库中获取数据,不需要网络... Firebase 也提供离线模式,它也可以持久保存数据,那我们为什么要使用 Room Database 呢?...希望你明白了...

【讨论】:

欢迎使用***,请通读问题和接受的答案以获取更多详细信息。

以上是关于将 Android Room 数据库与 Firebase 实时数据库相关联的主要内容,如果未能解决你的问题,请参考以下文章

Android JetPack组件之Room数据库的集成与详解

在使用 Android 架构组件和 Room 时将数据插入外部源/数据库

Android Kotlin Room 与Flow的应用 demo 添加数据并展示

Android Room:使用 Room 插入关系实体

将 TypeConverters 应用到 Dao Android Room

Android jetpack room SQLLite 数据库 修改字段