2015-11-02 124 views
4

我正在構建一個Android應用程序,其中涉及產品的詳細信息。這些產品將會有500到1000個項目,並隨着時間的推移而發展,隨着後端服務器的變化。如何在android應用程序中同步服務器數據?

爲了避免每次從服務器獲取這個大數據來顯示列表,需要保存在本地數據庫中並通過從數據庫查詢來顯示。

對於持久數據,我探索了以下幾種方法。

  1. 本地源碼(使用同步適配器框架同步)
  2. 境界(想不出如​​何同步)
  3. Couchbase精簡版(有它自己的同步網關)

但尚未couldn」對於最好的方法,我們會得出任何結論。

由於數據量很大,我們需要通過應用程序離線訪問數據,因此同步數據變得非常重要。我仍然在學習這些東西。

有人可以指導我在正確的方向設計存儲數據和同步數據時,後端有一些變化?

編輯:

雖然有不同意見或Android應用中設計的數據同步多種方式,想了解一些事情:

  1. 存儲選項
    一個。存儲在像Realm,CouchDB Lite這樣的本地sqlite或NoSQL數據庫中?

  2. 同步選項
    a。爲了同步,我需要讓sqlite數據庫結構與服務器數據庫相同嗎? b。可以將Realm與Sync適配器結合使用還是Realm有其他選項可供同步?

  3. 數據庫設計
    a。由於每個產品項目在點擊時都有更多細節需要顯示,因此產品詳細信息需要通過另一個API調用獲取,或者需要將所有這些細節包含在初始API調用中?遵循什麼設計方法?

+0

看一看此相關的問題。你需要的一切都在那裏。請閱讀所有答案:http://stackoverflow.com/questions/10829371/sync-data-between-android-app-and-webserver?rq=1 – narko

回答

1

你可以去原生sqlite選項(同步使用同步適配器框架)。根據您的要求,我想您還需要帳戶登錄以及列出產品,以便Sync Adapater也會負責認證。 您可以查看http://developer.android.com/training/sync-adapters/creating-sync-adapter.html以瞭解更多詳情。

所以方法可以是 1)當您啓動應用程序時,檢查是否爲您的應用程序創建了一個帳戶,如果沒有,創建一個新帳戶並配置一個定期同步啓動。 2)同步後,它會將數據存儲在sqlite數據庫中。 3)使用cursorLoader,您將從sqlite中獲取數據並將其顯示在UI上。

即使沒有網絡連接,這也將允許用戶瀏覽產品。您可以修改查詢以僅提取特定數量的產品,並使用回收視圖顯示列表中的項目。

我覺得更重要的一點是不從服務器獲取整個數據,因爲您提到的可能有500-1000個和更多的產品,因爲用戶可能無法瀏覽所有產品並獲取這樣的產品大量的數據會從用戶數據包中消耗更多的數據字節,這顯然他/她從不想同時頻繁地做出網絡請求將永遠不會允許用戶設備進入StandBy模式,並且設備電池將大大地耗盡網絡稱它使設備上電約半分鐘。

因此,現在根據需要處理上述缺點的間隔數來確定要提取的產品數量的一些標準。這肯定會讓用戶開心,你的應用程序將會更有效率。

P.s在實例化適配器時將0傳遞給flags屬性,因此如果數據已更改init,Loader將負責要求您的DB。

希望這可以幫助您決定進一步的步驟。

乾杯。

2

由於數據很大,我們需要通過應用程序離線訪問數據 ,因此同步數據變得非常重要。我仍然在學習 這些東西。

所以我對這個問題的想法是使用谷歌雲端通訊作爲服務器將發送信號(如果在服務器數據庫的變化)到所有客戶端應用程序來更新其本地數據庫。

首先,當應用程序首先運行時,所有產品將被加載並保存到應用程序,或者您可以隨意顯示它們。

因此,當有更新或新產品輸入時,服務器會向所有客戶端發送推送消息,告訴他們新服務器已添加到服務器(您可以向客戶端發送最大4KB的數據,在這種情況下,您應該將您的產品ID)

然後您可以從服務器(按產品ID)獲取數據並更新客戶端本地數據庫。

https://developers.google.com/cloud-messaging/

數據庫看到此鏈接: -

Should I use sqlite?

+0

感謝Jamil。是的,通知客戶有關服務器上可用的新數據,GCM是合適的方式。但是,你能幫我選擇sqlite,realm和couchbase lite中的本地db存儲選項嗎? –

+0

我更喜歡SQLite。看到我更新的答案。你可以找到SQLite的事實,優點和缺點。 – Jamil

相關問題