Freigeben über


Aktivieren der Offlinesynchronisierung für Ihre mobile Android-App

Überblick

In diesem Lernprogramm wird die Offlinesynchronisierungsfunktion von Azure Mobile Apps für Android behandelt. Die Offlinesynchronisierung ermöglicht Endbenutzern die Interaktion mit einer mobilen App – Anzeigen, Hinzufügen oder Ändern von Daten – auch wenn keine Netzwerkverbindung vorhanden ist. Änderungen werden in einer lokalen Datenbank gespeichert. Sobald das Gerät wieder online ist, werden diese Änderungen mit dem Remote-Back-End synchronisiert.

Wenn Dies Ihre erste Erfahrung mit Azure Mobile Apps ist, sollten Sie zuerst das Lernprogramm Erstellen einer Android-Appabschließen. Wenn Sie das heruntergeladene Schnellstartserverprojekt nicht verwenden, müssen Sie dem Projekt die Datenzugriffserweiterungspakete hinzufügen. Weitere Informationen zu Servererweiterungspaketen finden Sie unter Arbeiten mit dem .NET-Back-End-Server-SDK für Azure Mobile Apps.

Weitere Informationen zum Offlinesynchronisierungsfeature finden Sie im Thema Offlinedatensynchronisierung in Azure Mobile Apps.

Aktualisieren der App zur Unterstützung der Offlinesynchronisierung

Bei der Offlinesynchronisierung lesen und schreiben Sie aus einer -Synchronisierungstabelle (mithilfe der IMobileServiceSyncTable Schnittstelle), die Teil einer SQLite--Datenbank auf Ihrem Gerät ist.

Zum Übertragen und Abrufen von Änderungen zwischen dem Gerät und Azure Mobile Services verwenden Sie einen Synchronisierungskontext (MobileServiceClient.SyncContext), den Sie mit der lokalen Datenbank initialisieren, um Daten lokal zu speichern.

  1. Kommentieren Sie in TodoActivity.javadie vorhandene Definition von mToDoTable aus, und entkommentieren Sie die Synchronisierungstabellenversion.

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. Kommentieren Sie in der onCreate-Methode die vorhandene Initialisierung von mToDoTable aus, und kommentieren Sie diese Definition aus:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. Kommentieren Sie in refreshItemsFromTable die Definition von results aus und heben Sie die Kommentierung dieser Definition auf.

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Kommentieren Sie die Definition von refreshItemsFromMobileServiceTableaus.

  5. Entkommentieren Sie die Definition von 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. Kommentar der Definition von syncaufheben:

     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);
     }
    

Testen der App

In diesem Abschnitt testen Sie das Verhalten mit WLAN und deaktivieren dann WLAN, um ein Offlineszenario zu erstellen.

Wenn Sie Datenelemente hinzufügen, werden sie im lokalen SQLite-Speicher gespeichert, aber nicht mit dem mobilen Dienst synchronisiert, bis Sie die Schaltfläche Aktualisieren drücken. andere Apps haben möglicherweise unterschiedliche Anforderungen daran, wann Daten synchronisiert werden müssen, aber zu Demozwecken lässt dieses Lernprogramm den Benutzer es explizit anfordern.

Wenn Sie diese Schaltfläche drücken, wird eine neue Hintergrundaufgabe gestartet. Zunächst werden alle Änderungen am lokalen Speicher mithilfe des Synchronisierungskontexts übertragen, dann werden alle geänderten Daten aus Azure in die lokale Tabelle abgerufen.

Offline-Tests

  1. Platzieren Sie das Gerät oder den Simulator im Flugzeugmodus. Dadurch wird ein Offlineszenario erstellt.

  2. Fügen Sie einige ToDo- Elemente hinzu, oder markieren Sie einige Elemente als abgeschlossen. Beenden Sie das Gerät oder den Simulator (oder schließen Sie die App) und starten Sie es erneut. Stellen Sie sicher, dass Ihre Änderungen auf dem Gerät beibehalten wurden, da sie im lokalen SQLite-Speicher gespeichert sind.

  3. Zeigen Sie den Inhalt der Azure TodoItem- Tabelle entweder mit einem SQL-Tool wie SQL Server Management Studiooder einem REST-Client wie Fiddler oder Postman-an. Stellen Sie sicher, dass die neuen Elemente nicht mit dem Server synchronisiert wurden

    + 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. Aktivieren Sie WLAN auf dem Gerät oder Simulator. Drücken Sie dann die Schaltfläche Aktualisieren.

  5. Zeigen Sie die TodoItem-Daten erneut im Azure-Portal an. Die neuen und geänderten TodoItems sollten jetzt angezeigt werden.

Zusätzliche Ressourcen