Delen via


Offlinesynchronisatie inschakelen voor uw mobiele Xamarin.Android-app

Overzicht

In deze zelfstudie maakt u kennis met de functie voor offlinesynchronisatie van Azure Mobile Apps voor Xamarin.Android. Met offlinesynchronisatie kunnen eindgebruikers communiceren met een mobiele app, zoals het weergeven, toevoegen of wijzigen van gegevens, zelfs wanneer er geen netwerkverbinding is. Wijzigingen worden opgeslagen in een lokale database. Zodra het apparaat weer online is, worden deze wijzigingen gesynchroniseerd met de externe service.

In deze zelfstudie werkt u het clientproject bij vanuit de zelfstudie Een Xamarin Android-app maken ter ondersteuning van de offlinefuncties van Azure Mobile Apps. Als u het gedownloade quickstart-serverproject niet gebruikt, moet u de extensiepakketten voor gegevenstoegang toevoegen aan uw project. Zie Work with the .NET backend server SDK for Azure Mobile Apps (Werken met de SDK voor de .NET-back-en-Mobile Apps) voor meer informatie over serverextensiepakketten.

Zie het onderwerp Offline Data Sync in Azure Mobile Apps voor meer informatie over de functie voor offlinesynchronisatie.

De client-app bijwerken om offlinefuncties te ondersteunen

Met offlinefuncties van De mobiele app van Azure kunt u communiceren met een lokale database wanneer u offline bent. Als u deze functies in uw app wilt gebruiken, initialiseert u een SyncContext naar een lokale store. Verwijs vervolgens naar uw tabel via de interface IMobileServiceSyncTable . SQLite wordt gebruikt als het lokale winkel op het apparaat.

  1. Open Visual Studio NuGet-pakketbeheer in het project dat u hebt voltooid in de zelfstudie Een Xamarin Android-app maken. Zoek en installeer het NuGet-pakket Microsoft.Azure.Mobile.Client.SQLiteStore .
  2. Open het bestand ToDoActivity.cs en wijs de definitie uit #define OFFLINE_SYNC_ENABLED .
  3. Druk Visual Studio op F5 om de client-app opnieuw te bouwen en uit te voeren. De app werkt op dezelfde manier als voor u offlinesynchronisatie hebt ingeschakeld. De lokale database is nu echter gevuld met gegevens die kunnen worden gebruikt in een offlinescenario.

De app bijwerken om de verbinding met de back-en-back-te verbreken

In deze sectie verbreekt u de verbinding met de back-end van uw mobiele app om een offline situatie te simuleren. Wanneer u gegevensitems toevoegt, laat de uitzonderings-handler u weten dat de app in de offlinemodus is. In deze status worden nieuwe items toegevoegd in het lokale opslagitems die worden gesynchroniseerd met de back-end van de mobiele app wanneer een push wordt uitgevoerd in een verbonden status.

  1. Bewerk ToDoActivity.cs in het gedeelde project. Wijzig de applicationURL om te wijzen naar een ongeldige URL:

      const string applicationURL = @"https://your-service.azurewebsites.fail";
    

    U kunt ook offlinegedrag demonstreren door Wi-Fi en mobiele netwerken uit te schakelen op het apparaat of door gebruik te maken van de vliegtuigmodus.

  2. Druk op F5 om de app te bouwen en uit te voeren. U ziet dat de synchronisatie is mislukt bij het vernieuwen wanneer de app wordt gestart.

  3. Voer nieuwe items in en u ziet dat het pushen mislukt met de status [CancelledByNetworkError] telkens wanneer u op Opslaan klikt. De nieuwe todo-items bestaan echter in de lokale store totdat ze naar de back-end van de mobiele app kunnen worden pushen. Als u deze uitzonderingen onderdrukt, gedraagt de client-app zich in een productie-app alsof deze nog steeds is verbonden met de back-end van de mobiele app.

  4. Sluit de app en start deze opnieuw om te controleren of de nieuwe items die u hebt gemaakt, persistent zijn in de lokale store.

  5. (Optioneel) Open Visual Studio in Server Explorer. Navigeer naar uw database in Azure-SQL>Databases. Klik met de rechtermuisknop op uw database en selecteer Openen in SQL Server Objectverkenner. U kunt nu bladeren naar uw SQL databasetabel en de inhoud ervan. Controleer of de gegevens in de back-enddatabase niet zijn gewijzigd.

  6. (Optioneel) Gebruik een REST-hulpprogramma zoals Fiddler of Postman om een query uit te voeren op uw mobiele back-end, met behulp van een GET-query in de vorm https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Werk de app bij om opnieuw verbinding te maken met de back-end van uw mobiele app

In deze sectie maakt u de app opnieuw verbinding met de back-end van de mobiele app. Wanneer u de toepassing voor het eerst hebt uitgevoerd, roept de OnCreate gebeurtenis-handler aan OnRefreshItemsSelected. Met deze methode wordt aanroepen SyncAsync om uw lokale opslag te synchroniseren met de back-enddatabase.

  1. Open ToDoActivity.cs in het gedeelde project en keer de wijziging van de eigenschap applicationURL terug .

  2. Druk op de toets F5 om de app opnieuw te bouwen en uit te voeren. De app synchroniseert uw lokale wijzigingen met de back-end van de mobiele Azure-app met behulp van push- en pull-bewerkingen wanneer de OnRefreshItemsSelected methode wordt uitgevoerd.

  3. (Optioneel) Bekijk de bijgewerkte gegevens met behulp SQL Server Objectverkenner of een REST-hulpprogramma zoals Fiddler. U ziet dat de gegevens zijn gesynchroniseerd tussen de back-enddatabase van De mobiele app van Azure en het lokale opslagbestand.

  4. Klik in de app op het selectievakje naast een paar items om ze in de lokale store te voltooien.

    CheckItem roept aan SyncAsync om elk voltooid item te synchroniseren met de back-end van de mobiele app. SyncAsync roept zowel push als pull aan. Wanneer u een pull uitvoert voor een tabel waarin de client wijzigingen heeft aangebracht, wordt er altijd automatisch een push uitgevoerd. Dit zorgt ervoor dat alle tabellen in de lokale opslag samen met relaties consistent blijven. Dit gedrag kan leiden tot een onverwachte push. Zie Offline Data Sync in Azure Mobile Apps voor meer informatie over dit Mobile Apps.

De clientsynchronisatiecode controleren

Het Xamarin-clientproject dat u hebt gedownload toen u de zelfstudie Een Xamarin Android-app maken hebt voltooid, bevat al code die offline synchronisatie ondersteunt met behulp van een lokale SQLite-database. Hier is een kort overzicht van wat al is opgenomen in de code van de zelfstudie. Zie Offline Data Sync in Azure Mobile Apps voor een conceptueel overzicht van Mobile Apps.

  • Voordat tabelbewerkingen kunnen worden uitgevoerd, moet het lokale opslag worden initialiseren. De lokale store-database wordt initialiseren wanneer ToDoActivity.OnCreate() wordt uitgevoerd ToDoActivity.InitLocalStoreAsync(). Met deze methode maakt u een lokale SQLite-database MobileServiceSQLiteStore met behulp van de klasse die wordt geleverd door de Azure Mobile Apps client-SDK.

    Met DefineTable de methode maakt u een tabel in het lokale opslagopslag die overeenkomt met de velden in het opgegeven type, ToDoItem in dit geval. Het type hoeft niet alle kolommen in de externe database op te nemen. Het is mogelijk om slechts een subset kolommen op te slaan.

      // ToDoActivity.cs
      private async Task InitLocalStoreAsync()
      {
          // new code to initialize the SQLite store
          string path = Path.Combine(System.Environment
              .GetFolderPath(System.Environment.SpecialFolder.Personal), localDbFilename);
    
          if (!File.Exists(path))
          {
              File.Create(path).Dispose();
          }
    
          var store = new MobileServiceSQLiteStore(path);
          store.DefineTable<ToDoItem>();
    
          // Uses the default conflict handler, which fails on conflict
          // To use a different conflict handler, pass a parameter to InitializeAsync.
          // For more details, see https://go.microsoft.com/fwlink/?LinkId=521416.
          await client.SyncContext.InitializeAsync(store);
      }
    
  • Het toDoTable lid van ToDoActivity is van het IMobileServiceSyncTable type in plaats van IMobileServiceTable. De IMobileServiceSyncTable stuurt alle CRUD-tabelbewerkingen (maken, lezen, bijwerken en verwijderen) door naar de lokale store-database.

    U bepaalt door aan te roepen wanneer wijzigingen naar de back-end van de mobiele Azure-app worden pushen IMobileServiceSyncContext.PushAsync(). De synchronisatiecontext helpt tabelrelaties te behouden door wijzigingen in alle tabellen bij te houden en te pushen die een client-app heeft gewijzigd wanneer PushAsync deze wordt aangeroepen.

    De opgegeven code roept aan ToDoActivity.SyncAsync() om te synchroniseren wanneer de todoitem-lijst wordt vernieuwd of een todoitem wordt toegevoegd of voltooid. De code wordt gesynchroniseerd na elke lokale wijziging.

    In de opgegeven code worden alle records in TodoItem de externe tabel opgevraagd, maar het is ook mogelijk om records te filteren door een query-id en query door te geven aan PushAsync. Zie de sectie Incrementele synchronisatie in offline-Data Sync in Azure Mobile Apps.

      // ToDoActivity.cs
      private async Task SyncAsync()
      {
          try {
              await client.SyncContext.PushAsync();
              await toDoTable.PullAsync("allTodoItems", toDoTable.CreateQuery()); // query ID is used for incremental sync
          } catch (Java.Net.MalformedURLException) {
              CreateAndShowDialog (new Exception ("There was an error creating the Mobile Service. Verify the URL"), "Error");
          } catch (Exception e) {
              CreateAndShowDialog (e, "Error");
          }
      }
    

Aanvullende resources