0

問題:假設我有一個Web服務返回一個JSON,我將其反序列化爲(列表)POJO(s),如果每個片段都獲得數據源的副本或者我應該只在活動中保留數據源,並讓片段通過回調接口(我在onAttach()中設置)獲取數據?或者還有更好的方法嗎?Android概念:數據源是否屬於活動或片段

爲什麼

我與Android合作安靜了一段時間,但現在我覺得我還沒有完全理解一些非常基本的原則,我希望你能幫助我澄清的事情。在我的一個應用程序中,我使用Volley來調用返回JSON格式數據的Web服務。我使用GSON將JSON反序列化爲POJO。然後我使用綠色機器人EventBus發送新的數據,以便我可以更新UI。目前我所有的片段都被註冊爲訂閱者,每個片段都存儲對數據的引用。

我想我這樣做是錯誤的,因爲如果一個片段當前沒有被顯示(他們從onStop()中的EventBus註銷)。他們可能會錯過模型的更新,當Backstack彈出時,他們可能會顯示過時的模型,對吧?

那麼存儲模型的最佳方式是什麼?以便我的所有UI組件和控制器始終顯示最新版本的模型?我擔心一個或其他組件(片段和/或活動)可能會錯過更新,然後顯示過時的數據。

什麼是Android的方式來存儲從Web服務檢索到的模型,並使其可以訪問活動和片段?

我認爲我的主要問題是我可以刷新多個活動和片段中的數據。例如,我可以在對條目列表進行拉到刷新後重新加載數據,但重命名條目也會導致更新 - 但僅限於此特定條目。

回答

0

你有沒有想過使用sqlite來存儲數據,然後顯示它? 我會做如下:

  • 獲取來自服務的數據作爲JSON

  • 從SQLite表解析JSON並將其存儲在一個SQLite表

  • 讀爲和需要

當這樣做的好處是,你能夠存儲新的數據以及更新舊的和你說您可以使用下拉菜單來刷新功能,這對於存儲最新數據以及舊數據很有幫助,並始終在您從正在更新的數據源中獲取數據時顯示最新數據。

+0

我正在考慮使用某種類型的持久性,如SQLite或Realm,但另一方面可能只是一點點,因爲我最有可能只處理一堆JSON對象,我將不得不重新加載它們每次應用程序啓動或暫時不活動時。更新在每5秒到每小時一次(遠程設備的gps位置更新)之間非常規律。我也在考慮使用Firebase實時數據庫,但目前服務器端後端僅爲我提供基於JSON的REST Web服務。 – xxtesaxx

+0

也許一個Singleton可以做一個數據存儲的工作,並將這些POJO保存在內存中,但我不知道Android是否真的有一些最佳實踐。 – xxtesaxx