啟用 Android 行動應用程式的離線同步處理

概觀

本教學課程說明 Android 之 Azure Mobile Apps 的離線同步處理功能。 離線同步處理可讓使用者與行動應用程式互動—即使沒有網路連線,也能讓使用者與行動應用程式互動。 變更會儲存在本機資料庫中。 裝置恢復上線後,這些變更就會與遠端後端進行同步處理。

如果這是您第一次接觸 Azure Mobile Apps,您應先完成 建立 Android 應用程式教學課程。 如果您不要使用下載的快速入門伺服器專案,必須將資料存取擴充套件新增至您的專案。 如需伺服器擴充套件的詳細資訊,請參閱使用 Azure Mobile Apps 的 .NET 後端伺服器 SDK

若要深入了解離線同步處理功能,請參閱 Azure Mobile Apps 中的離線資料同步處理主題。

更新應用程式以支援離線同步

利用離線同步讀取和寫入同步資料表 (使用 IMobileServiceSyncTable 介面),這是您裝置上 SQLite 資料庫的一部分。

若要推送和提取裝置與 Azure 行動服務之間的變更,您可使用同步處理內容 (MobileServiceClient.SyncContext),這是您用來在本機儲存資料的本機資料庫所初始化。

  1. TodoActivity.java 中,將 mToDoTable 的現有定義註解化,並取消註解同步資料表版本:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. onCreate 方法中,將 mToDoTable 的現有初始化註解化,並取消註解此定義:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. refreshItemsFromTable 中,將 results 的定義註解化,並取消註解此定義:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. 註解化 refreshItemsFromMobileServiceTable的定義。

  5. 取消註解 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();
     }
    
  6. 取消註解 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 提取至本機資料表。

離線測試

  1. 讓裝置或模擬器處於「飛航模式」 。 這會建立離線案例。

  2. 新增一些 ToDo 項目,或將某些項目標示為完成。 結束裝置或模擬器 (或強制關閉應用程式),然後重新啟動。 請確認您的變更已保存在裝置上,因為它們會保留在本機 SQLite 存放區中。

  3. 使用 SQL 工具 (如 SQL Server Management Studio) 或 REST 用戶端 (如 FiddlerPostman) 檢視 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*.
    
  4. 在裝置或模擬器中開啟 WiFi。 接著,按 [重新整理] 按鈕。

  5. 在 Azure 入口網站中,再次檢視 TodoItem 資料。 新的和變更的 TodoItems 現在應該會出現。

其他資源