在我的Android应用程序中,我必须保留现有的SQLite数据库,但为了将元素(来自todo-list的任务)同步到多个设备,我决定使用Firebase数据库。
所以我没有启用Firebase数据库离线模式,因为我必须使用SQLite(它适用于大学项目)。
所以我正在为写入做的是,每当从本地SQLite数据库添加或删除某些数据时,也会对Firebase进行更改。
如果用户连接到Internet,或者即使用户离线添加任务,然后在应用程序上联机,所有这一切都按预期工作。
但是,如果用户离线添加任务,然后关闭应用程序,然后在另一个应用程序中联机,即使用户再次打开我的应用程序,更改也不会被推送到数据库。
有什么想法吗?
谢谢。
答案 0 :(得分:2)
由于您未启用Firebase数据库脱机模式,因此您尝试推送的应用程序的所有数据都不会保存在永久存储中,仅保存在内存中。这就是为什么在应用程序重启后所有这些数据都没有被推送到Firebase。
因此,您需要在应用程序启动时使用某种同步算法,将数据从本地数据库推送到firebase(反之亦然)。
例如,您可以在本地和firebase端使用时间戳标记(System.currentTimeMillis()),它总是应该在任何数据库更改时更新。
然后在应用程序启动时,您只需检查此标记:
如果本地标记大于远程标记 - 这意味着 远程数据库已过时。所以只需复制所有本地sql数据库 数据到firebase。
如果远程标记大于本地标记 - 只需清理本地数据库 并从firebase下载所有数据。
如果两个标记相同 - 这意味着一切都是最新的, 什么都不做。
希望这会有所帮助:)