2013-02-19 106 views
2

我的應用程序中有數據,必須根據網絡可用性在服務器上進行更新。我使用sqlite將這些數據存儲在android上的本地數據庫中。目前的想法是:與網絡服務器同步設備數據

  1. 數據應在本地SQLite數據庫中插入
  2. 服務應該儘快將數據插入它等待檢查網絡的可用性,並將其發送到服務器,並等待成功響應。
  3. 如果從服務器收到響應true,它應該更新該sqlite行的同步狀態並移動到下一行以發送數據。

我想找出將這些數據排隊發送到服務器的最佳方法,此外,當網絡不可用時,此隊列應停止向服務器發送數據。由於在Java中有很多隊列可用,所以queu最適合保存這些數據。由於數據可以增長到無限大。它就像一個生產者 - 消費者問題,但最有效的解決方法是什麼?

在此先感謝。

+0

您是否找到了解決方案?我必須做同樣的事情。請將您的代碼作爲回答並附上一些說明。謝謝 – 2013-06-28 05:40:17

+1

使用鏈接的阻塞隊列,因爲它們在Java中可用。將數據插入數據庫時​​,請同時更新隊列。 – muneikh 2013-07-01 05:58:46

+0

可以請你提供一些鏈接或教程。謝謝 – 2013-07-01 06:01:36

回答

0

當數據已存儲在本地數據庫中時,爲什麼要將這些數據存儲在隊列中?我的意思是如果你的應用程序被關閉,那麼隊列中的數據就會丟失。只需編寫一個服務來檢查本地數據庫中的新條目。如果有新條目嘗試將它們推送到網絡服務器。

+1

是的,你是對的。隊列中的數據將丟失,並且不需要在隊列中保存數據。但是從本地數據庫檢查數據的最佳方法是什麼?我的意思是製作一個線程並且有一個循環來連續檢查數據將不必要地使用cpu週期。什麼應該是解決這個問題的最有效的方法。 – muneikh 2013-02-19 09:39:34

+0

在這種情況下我們可以使用廣播接收器,但是如果這個廣播接收器被多次觸發(比如用戶不斷點擊添加數據庫中的行的按鈕)。在這種情況下,廣播將按用戶點擊按鈕的次數觸發。 先前請求的執行已經發生,同時發生的火災將多次發送相同的數據。 – muneikh 2013-02-19 09:44:08