2012-07-02 33 views
48

我正在開發一個Android應用程序,它在Android平臺提供的內置SQL Light中存儲不同類型的數據。如何使Android數據庫與在線SQL Server同步?

在應用程序內部,我放置了一個「Sync」按鈕,它應該將本地SQL Light數據庫與我的服務器上的Online SQL Server數據庫之間的數據同步。

解決此問題的方法是什麼?您可以在Google日曆中找到此功能,您可以在其中查看移動設備上的日曆活動,以及添加新活動並同步數據時,還可以通過轉到在線帳戶查看更新後的數據。

注:我不想集中我的數據庫在線,因爲我也想給移動用戶在沒有互聯網連接的情況下使用應用程序的能力。

謝謝。

+2

編寫一個Web服務並從服務中獲取更新的數據並更新你的sqllite數據庫..反之亦然 –

+0

我已經使用PHP寫過web服務。取決於你的實現,你可能只想把新事件放進你的sqlite數據庫或添加/刪除/修改。儘管最好/唯一的方法是編寫一個web服務作爲中間件來在應用程序和後端之間進行通信! – javajavajava

+0

你在sqllite和mysql服務器之間進行同步嗎? – morty346

回答

60

您應該看看Android SDK演示中的SampleSyncAdapter項目(Transferring Data Using Sync Adapters)。 它向你展示瞭如何做同步「Android風格」,它不需要用戶通過手動點擊同步按鈕來進行交互。

最重要的是,您需要編寫能夠爲您的SyncAdapter提供自上次提交以來所有更改的「增量」的服務器軟件。最基本的方法是在您的應用程序中保留必須來自服務器的「最後同步」時間戳,否則由於客戶端和服務器之間的時間差異,您可能會陷入麻煩。將所有時間戳標準化爲GMT或任何您選擇的時區,但堅持這一決定。 如果您的應用程序需要在本地時間顯示時間戳,則需要使用Java日曆和TimeZone類將歸一化時間戳轉換爲本地時間。

您的應用程序還需要將已更改的本地記錄標記爲「髒」,因此SyncAdapter知道它需要將這些已更改或新記錄上載到服務器。

以下最低功能需要爲您的服務器軟件:

  • 更新現有記錄(S)功能
  • 添加新的記錄(S)功能
  • 獲取更新的記錄自上次同步(應用程序提供時間郵票)
  • 獲取新信息的記錄,因爲上次同步(應用程序提供時間戳)

您也可能想通過一些Google API(如Google日曆)瞭解所有這些工作原理以及如何爲通信設計服務器API接口。

+0

完美答案!非常感謝。 –

+6

[鏈接到示例。](http://developer.android.com/training/sync-adapters/index.html) – BRS

+1

@CodeZombie,添加到問題中 – naXa

相關問題