Freigeben über


Aktivieren der Offlinesynchronisierung für Ihre mobile Android-App

Übersicht

In diesem Tutorial 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 besteht. Änderungen werden in einer lokalen Datenbank gespeichert. Sobald das Gerät wieder online ist, werden diese Änderungen mit dem Remote-Back-End synchronisiert.

Falls Sie noch keine Erfahrung mit Azure Mobile Apps haben, sollten Sie zunächst das Tutorial Erstellen einer Android-Appabschließen. Wenn Sie das heruntergeladene Schnellstart-Serverprojekt nicht verwenden, müssen Sie Ihrem Projekt die Datenzugriffs-Erweiterungspakete hinzufügen. Weitere Informationen zu Servererweiterungspaketen finden Sie unter Work with the .NET backend server SDK for Azure Mobile Apps(in englischer Sprache).

Weitere Informationen zur Offlinesynchronisierungsfunktion finden Sie im Thema Offlinedatensynchronisierung in Azure Mobile Apps.

Aktualisieren der App für die Unterstützung von Offlinesynchronisierung

Bei der Offlinesynchronisierung wird in eine Synchronisierungstabelle geschrieben und aus dieser gelesen (mit der IMobileServiceSyncTable-Schnittstelle). Diese ist Teil einer SQLite-Datenbank auf Ihrem Gerät.

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

  1. Kommentieren Sie in TodoActivity.java die vorhandene Definition von mToDoTable und entfernen Sie den Kommentar für die Version der Synchronisierungstabelle:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. Kommentieren Sie in der onCreate-Methode die vorhandene Initialisierung mToDoTable und entfernen Sie den Kommentar für diese Definition:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. Kommentieren Sie in refreshItemsFromTable die Definition von results und heben Sie den Kommentar für diese Definition auf:

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

  5. Enfernen Sie den Kommentar der 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. Enfernen Sie den Kommentar der Definition von 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);
     }
    

Testen der App

In diesem Abschnitt testen Sie das Verhalten bei aktiviertem WLAN und deaktivieren anschließend WLAN, um ein Offlineszenario zu erzeugen.

Wenn Sie Datenelemente hinzufügen, werden diese im lokalen SQLite-Speicher gespeichert, jedoch erst mit dem mobilen Dienst synchronisiert, wenn Sie auf die Schaltfläche Aktualisieren klicken. Bei anderen Apps müssen Daten möglicherweise zu anderen Zeitpunkten synchronisiert werden, zur Veranschaulichung muss jedoch in diesem Lernprogramm der Benutzer die Synchronisierung explizit anfordern.

Wenn Sie auf diese Schaltfläche klicken, wird eine neue Hintergrundaufgabe gestartet. Sie überträgt zuerst alle Änderungen am lokalen Speicher unter Verwendung eines Synchronisierungskontexts und ruft dann alle geänderten Daten aus Azure in die lokale Tabelle ab.

Offlinetest

  1. Schalten Sie das Gerät oder den Simulator in den Flugzeugmodus. Dies erzeugt ein Offlineszenario.

  2. Fügen Sie einige ToDo-Elemente hinzu, oder markieren Sie einige Elemente als abgeschlossen. Schalten Sie das Gerät oder den Simulator aus (oder erzwingen Sie das Schließen der App), und starten Sie das Gerät bzw. den Simulator neu. Vergewissern Sie sich, dass die Änderungen auf dem Gerät beibehalten wurden, da sie im lokalen SQLite-Speicher gespeichert sind.

  3. Zeigen Sie die Inhalte der Azure-TodoItem-Tabelle entweder mit einem SQL-Tool wie SQL Server Management Studio oder einen REST-Client wie Fiddler oder Postman an. Vergewissern Sie sich, 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 auf dem Gerät oder Simulator WLAN. Klicken Sie anschließend auf die Schaltfläche Aktualisieren .

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

Weitere Ressourcen