次の方法で共有


Android モバイル アプリのオフライン同期を有効にする

概要

このチュートリアルでは、Android 用 Azure Mobile Apps のオフライン同期機能について説明します。 オフライン同期を使用すると、エンド ユーザーは、ネットワーク接続がない場合でも、モバイル アプリを操作できます (データの表示、追加、変更)。 変更はローカル データベースに格納されます。 デバイスがオンラインに戻ると、これらの変更はリモート バックエンドと同期されます。

これが Azure Mobile Apps を初めて使用する場合は、最初に「Android アプリ を作成する」チュートリアルを完了する必要があります。 ダウンロードしたクイック スタート サーバー プロジェクトを使用しない場合は、データ アクセス拡張機能パッケージをプロジェクトに追加する必要があります。 サーバー拡張機能パッケージの詳細については、「.NET バックエンド サーバー SDK for Azure Mobile Appsを使用する」を参照してください。

オフライン同期機能の詳細については、「Azure Mobile Apps でのオフライン データ同期」を参照してください。

オフライン同期をサポートするようにアプリを更新する

オフライン同期では、デバイス上の SQLite データベースの一部である (IMobileServiceSyncTable インターフェイスを使用して) 同期テーブル との間で読み取りと書き込みを行います。

デバイスと Azure Mobile Services の間で変更をプッシュおよびプルするには、同期コンテキスト (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 ツール、または Fiddler や Postmanなどの REST クライアントを使用して、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 portal で TodoItem データをもう一度表示します。 新しい TodoItems と変更された TodoItems が表示されるはずです。

その他のリソース