Włączanie synchronizacji w trybie offline dla aplikacji mobilnej systemu Android

Omówienie

Ten samouczek obejmuje funkcję synchronizacji w trybie offline usługi Azure Mobile Apps dla systemu Android. Synchronizacja w trybie offline umożliwia użytkownikom mobilnym interakcję z aplikacją mobilną — wyświetlanie, dodawanie lub modyfikowanie danych — nawet wtedy, gdy nie ma połączenia sieciowego. Zmiany są przechowywane w lokalnej bazie danych. Po powrocie urządzenia do trybu online te zmiany są synchronizowane ze zdalnym zapleczami.

Jeśli jest to Pierwsze doświadczenie z usługą Azure Mobile Apps, należy najpierw ukończyć samouczek Tworzenie aplikacji dla systemu Android. Jeśli nie używasz pobranego projektu serwera Szybki start, musisz dodać do projektu pakiety rozszerzeń dostępu do danych. Aby uzyskać więcej informacji na temat pakietów rozszerzeń serwera, zobacz Praca z zestawem SDK serwera zaplecza platformy .NET dla usługi Azure Mobile Apps.

Aby dowiedzieć się więcej na temat funkcji synchronizacji w trybie offline, zobacz temat Offline Data Sync in Azure Mobile Apps (Synchronizacja w trybie offline w usłudze Azure Mobile Apps).

Aktualizowanie aplikacji w celu obsługi synchronizacji w trybie offline

Synchronizacja w trybie offline umożliwia odczyt i zapis z tabeli synchronizacji (przy użyciu interfejsu IMobileServiceSyncTable ), która jest częścią bazy danych SQLite na urządzeniu.

Aby wypychać i ściągać zmiany między urządzeniem i usługą Azure Mobile Services, należy użyć kontekstu synchronizacji (MobileServiceClient.SyncContext), który jest inicjujeny z lokalną bazą danych w celu przechowywania danych lokalnie.

  1. W TodoActivity.javapliku należy komentarz do istniejącej definicji tabeli mToDoTable synchronizacji i komentarza wersji tabeli synchronizacji:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. W metodzie onCreate zakomentuj istniejącą inicjację mToDoTable tej definicji i cofń jej komentarz:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. W refreshItemsFromTable komentarzu definicja i results komentarz tej definicji:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Nadaj komentarz definicji .refreshItemsFromMobileServiceTable

  5. Cokmentuj definicję :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. Cokmentuj definicję :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);
     }
    

Testowanie aplikacji

W tej sekcji przetestujemy zachowanie przy użyciu sieci Wi-Fi, a następnie wyłączymy sieć Wi-Fi, aby utworzyć scenariusz w trybie offline.

Po dodaniu elementów danych są one przechowywane w lokalnym magazynie SQLite, ale nie są synchronizowane z usługą mobilną do momentu naciśnięcia przycisku Odśwież . Inne aplikacje mogą mieć różne wymagania dotyczące sytuacji, w których należy zsynchronizować dane, ale w celach demonstracyjnych w tym samouczku użytkownik jawnie zażąda ich.

Po naciśnięciu tego przycisku zostanie uruchomiony nowe zadanie w tle. Najpierw wypycha wszystkie zmiany wprowadzone do magazynu lokalnego przy użyciu kontekstu synchronizacji, a następnie ściąga wszystkie zmienione dane z platformy Azure do tabeli lokalnej.

Testowanie offline

  1. Umieść urządzenie lub symulator w trybie samolotowym. Powoduje to utworzenie scenariusza w trybie offline.

  2. Dodaj niektóre zadania do wykonania lub oznacz niektóre elementy jako ukończone. Zamknij urządzenie lub symulator (lub wymusz zamknięcie aplikacji) i uruchom ponownie. Sprawdź, czy zmiany zostały utrwalone na urządzeniu, ponieważ są przechowywane w lokalnym magazynie SQLite.

  3. Wyświetl zawartość tabeli Azure TodoItem za pomocą narzędzia SQL, takiego jak SQL Server Management Studio, lub klienta REST, takiego jak Fiddler lub Postman. Sprawdź, czy nowe elementy nie zostały zsynchronizowane z serwerem

    + 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. Włącz sieć Wi-Fi na urządzeniu lub w symulatorze. Następnie naciśnij przycisk Odśwież .

  5. Ponownie wyświetl dane todoItem w Azure Portal. Powinny zostać wyświetlone nowe i zmienione todoItems.

Dodatkowe zasoby