啟用 Android 行動應用程式的離線同步處理
概觀
本教學課程說明 Android 之 Azure Mobile Apps 的離線同步處理功能。 離線同步處理可讓使用者與行動應用程式互動—即使沒有網路連線,也能讓使用者與行動應用程式互動。 變更會儲存在本機資料庫中。 裝置恢復上線後,這些變更就會與遠端後端進行同步處理。
如果這是您第一次接觸 Azure Mobile Apps,您應先完成 建立 Android 應用程式教學課程。 如果您不要使用下載的快速入門伺服器專案,必須將資料存取擴充套件新增至您的專案。 如需伺服器擴充套件的詳細資訊,請參閱使用 Azure Mobile Apps 的 .NET 後端伺服器 SDK。
若要深入了解離線同步處理功能,請參閱 Azure Mobile Apps 中的離線資料同步處理主題。
更新應用程式以支援離線同步
利用離線同步讀取和寫入同步資料表 (使用 IMobileServiceSyncTable 介面),這是您裝置上 SQLite 資料庫的一部分。
若要推送和提取裝置與 Azure 行動服務之間的變更,您可使用同步處理內容 (MobileServiceClient.SyncContext),這是您用來在本機儲存資料的本機資料庫所初始化。
在
TodoActivity.java
中,將mToDoTable
的現有定義註解化,並取消註解同步資料表版本:private MobileServiceSyncTable<ToDoItem> mToDoTable;
在
onCreate
方法中,將mToDoTable
的現有初始化註解化,並取消註解此定義:mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
在
refreshItemsFromTable
中,將results
的定義註解化,並取消註解此定義:// Offline Sync final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
註解化
refreshItemsFromMobileServiceTable
的定義。取消註解
refreshItemsFromMobileServiceTableSyncTable
的定義:private List<ToDoItem> refreshItemsFromMobileServiceTableSyncTable() throws ExecutionException, InterruptedException { //sync the data sync().get(); Query query = QueryOperations.field("complete"). eq(val(false)); return mToDoTable.read(query).get(); }
取消註解
sync
的定義:private AsyncTask<Void, Void, Void> sync() { AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){ @Override protected Void doInBackground(Void... params) { try { MobileServiceSyncContext syncContext = mClient.getSyncContext(); syncContext.push().get(); mToDoTable.pull(null).get(); } catch (final Exception e) { createAndShowDialogFromTask(e, "Error"); } return null; } }; return runAsyncTask(task); }
測試應用程式
在本節中,您會在開啟 WiFi 的情況下測試行為,然後關閉 WiFi 以建立離線案例。
當您新增資料項目時,這些項目會存放在本機 SQLite 存放區中,但直到您按 [重新整理] 按鈕時才會同步處理至行動服務。 對於何時需要同步處理資料,其他應用程式可能會有不同的需求,但是為了示範目的,本教學課程讓使用者明確要求。
當您按下該按鈕時,新的背景工作會啟動。 它會使用同步處理內容先推送對本機存放區做的所有變更,然後將所有變更的資料從 Azure 提取至本機資料表。
離線測試
讓裝置或模擬器處於「飛航模式」 。 這會建立離線案例。
新增一些 ToDo 項目,或將某些項目標示為完成。 結束裝置或模擬器 (或強制關閉應用程式),然後重新啟動。 請確認您的變更已保存在裝置上,因為它們會保留在本機 SQLite 存放區中。
使用 SQL 工具 (如 SQL Server Management Studio) 或 REST 用戶端 (如 Fiddler 或 Postman) 檢視 Azure TodoItem 資料表的內容。 請確認新項目「尚未」 同步處理到伺服器
+ For a Node.js backend, go to the [Azure portal](https://portal.azure.com/), and in your Mobile App backend click **Easy Tables** > **TodoItem** to view the contents of the `TodoItem` table. + For a .NET backend, view the table contents either with a SQL tool such as *SQL Server Management Studio*, or a REST client such as *Fiddler* or *Postman*.
在裝置或模擬器中開啟 WiFi。 接著,按 [重新整理] 按鈕。
在 Azure 入口網站中,再次檢視 TodoItem 資料。 新的和變更的 TodoItems 現在應該會出現。
其他資源
- Azure Mobile Apps 中的離線資料同步處理
- 雲端報導︰Azure 行動服務中的離線同步處理 (注意︰影片位於行動服務上,但離線同步處理的運作方式類似在 Azure 行動應用程式中的方式)