2017-01-05 106 views
1

在我的Android應用程序中,我必須保留現有的SQLite數據庫,但爲了將元素(待辦事項列表中的任務)同步到多個設備,我決定使用Firebase數據庫。Firebase數據庫離線寫作

所以我沒有啓用Firebase數據庫離線模式,因爲我必須使用SQLite(這是一個大學項目)。

因此,我正在寫的是,無論何時從本地SQLite數據庫中添加或刪除一些數據,這些數據也會對Firebase進行更改。

如果用戶連接到互聯網,或者即使用戶脫機添加任務,然後在應用程序上時聯機,所有這些都可以按預期工作。

但是,如果用戶離線添加任務,然後關閉應用程序,然後在另一個應用程序中變爲在線,則即使用戶再次打開我的應用程序,也不會將更改推送到數據庫。

任何想法?

謝謝。

+0

據我所知,如果存在執行寫入互聯網(火力地堡)設備之間沒有任何聯繫,也沒有辦法,火力地堡的數據在那裏將被更新。但是如果手機在應用程序關閉後上線,則可以使用一些後臺服務來更新數據,然後就完成了。 – koceeng

回答

2

由於您未啓用Firebase數據庫離線模式,因此您嘗試推送的應用程序的所有數據都不會保存在永久存儲器中,只能保存在內存中。這就是爲什麼所有這些數據都不會在應用程序重新啓動後推送到Firebase。

因此,在應用程序啓動時需要一些同步算法,將數據從本地數據庫推送到firebase(反之亦然)。例如,您可以在本地和firebase端使用timestamp標記(System.currentTimeMillis()),這些標記始終應在任何數據庫更改時更新。

然後在應用程序啓動時你可以檢查此標記:

  • 如果本地標記比遠程一個更大的 - 這意味着 遠程數據庫是過時的。因此,只需將所有本地sql數據庫 數據複製到firebase。

  • 如果遠程標記大於本地標記 - 只需清理本地db 並從firebase下載所有數據。

  • 如果兩個標記都相等 - 表示一切都是最新的, 什麼都不做。

希望這有助於:)