将Firebase DB与本地数据库一起使用

时间:2016-08-19 00:01:34

标签: android firebase android-sqlite firebase-realtime-database firebase-authentication

在我的应用中,我有SQLite db。我想介绍用户设备之间的同步。 Firebase DB看起来是一个可接受的解决方案,但Firebase DB最初是云数据库。所以,如果用户拒绝auth对话并允许他使用app,但没有云同步,我就不能将它用作本地数据库。

现在我考虑将local SQLite dbcloud Firebase db合并。

例如,当用户向local SQLite db添加新行时,我的应用也会将数据放入Firebase DB。此用户的其他设备将捕获此事件并更新其本地数据库。当用户使用身份验证并在新设备上安装应用时,我希望它下载所有行并将其放入local SQLite db。这就是我的想法:仅使用Firebase DB 来同步数据,而不是将其存储在设备上。它的主要原因是让用户在不进行身份验证和同步的情况下使用我的应用程序。第二个是that Firebase DB并非设计用作本地数据库。

我是对的? 将Firebase数据库与其他本地数据库一起使用是否可以?

相关问题:

link他想要我想要的一样:

  

我的计划是为用户提供保持离线的选项

2 个答案:

答案 0 :(得分:2)

HTML5混合应用的一些选项

这不是OP所询问的,但希望对一些寻求者有用。

您可以使用客户端和服务器数据库的任意组合来实现在设备中存储远程维护的数据,以便在离线时可用。

一些客户选项:

一些服务器选项:

答案 1 :(得分:2)

如果您的firebase结构不是太复杂,您还可以创建一个定义

等方法的界面
void addData(Data data);
Data getData(long id);
void editData(Data data, long id);
void deleteData(long id);

然后创建2个实现该接口的类,一个使用Firebase,另一个使用SQLite。

DatabaseImplementation
FirebaseImplementation

在您的Firebase实施中,您可以像平常一样发布数据,并将一个新节点发布到类似root/requestUpdate/userId/push/的内容,推送将包含有关您请求更新的 的信息,以及 deviceId 发布了它。

然后将ValueEventListener绑定到上述节点,如果它获得一个新子节点,请查看deviceId是否相同。如果不是,请使用您获得的信息 FirebaseImplementation getData ,然后使用 DatabaseImplementation addData

这将确保无论何时进行更改,任何其他登录的客户端都将知道更新其firebase。如果客户端不在线,则下次他将在线时,他会在ValueEventListener附加时触发它。确保循环遍历所有请求的更新,以确保所有更新。还要在本地数据库中存储您完成的任何更新的推送键,这样您就不会多次更新。

基本上,firebase将始终是最新的,并存储用户对所有客户端监听的单独节点所做的任何更改。

显然,此解决方案仍然存在许多您需要解决的问题,例如确定何时删除requestUpdate节点。逻辑上每个用户同步后但你如何确定? ......

首次登录时,您需要编写一个 populateDatabaseFromFirebase()方法,该方法将执行大量的getDatas和addDatas。你将如何做到这将取决于你的数据库的外观。然后,您将存储用户已使用 SharedPreferences 和firebase UID 登录。

所有人都说,只有你的火力基地非常平坦,这才有效。如果你有一个复杂的数据库,那么一切都变得更加复杂和纠缠,然后它可能值得查看外部库。