共用方式為


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

概觀

本教學課程涵蓋適用於 Android 的 Azure Mobile Apps 離線同步處理功能。 離線同步可讓終端使用者與行動應用程式互動,即使在沒有網路連線時,也能檢視、新增或修改資料。 變更會儲存在本機資料庫中。 裝置重新上線后,這些變更會與遠端後端同步。

如果這是 Azure Mobile Apps 的第一次體驗,您應該先完成教學課程,建立 Android 應用程式。 如果您未使用下載的快速入門伺服器專案,您必須將資料存取延伸模組套件新增至專案。 如需有關伺服器擴充套件的更多資訊,請參閱 使用適用於 Azure 行動應用的 .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 Server Management Studio等 SQL 工具來檢視 Azure TodoItem 數據表的內容,或是 FiddlerPostman等 REST 用戶端。 請確認新項目尚未同步至伺服器

    + 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 現在應該會出現。

其他資源