Udostępnij za pośrednictwem


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

Przegląd

W tym samouczku omówiono funkcję synchronizacji offline usługi Azure Mobile Apps dla systemu Android. Synchronizacja w trybie offline umożliwia użytkownikom końcowym 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 zapleczem.

Jeśli korzystasz z usługi Azure Mobile Apps, najpierw wykonaj samouczek Tworzenie aplikacji dla systemu Android. Jeśli nie używasz pobranego projektu serwera Szybki start, musisz dodać pakiety rozszerzeń dostępu do danych do projektu. Aby uzyskać więcej informacji na temat pakietów rozszerzeń serwera, zobacz Work with the .NET backend server SDK for Azure Mobile Apps.

Aby dowiedzieć się więcej na temat funkcji synchronizacji offline, zobacz temat Offline Data Sync 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óry jest częścią bazy danych SQLite na urządzeniu.

Aby wypychać i ściągać zmiany między urządzeniem a usługami Azure Mobile Services, należy użyć kontekstu synchronizacji (MobileServiceClient.SyncContext), który jest inicjowany za pomocą lokalnej bazy danych do przechowywania danych lokalnie.

  1. W TodoActivity.java pliku zakomentuj istniejącą definicję mToDoTable i odkomentuj wersję tabeli synchronizacji.

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. W metodzie onCreate zakomentuj istniejącą inicjalizację mToDoTable i odkomentuj tę definicję:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. W refreshItemsFromTable zakomentuj definicję results i odkomentuj tę definicję:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Zakomentuj definicję refreshItemsFromMobileServiceTable.

  5. Usuń komentarz z definicji elementu 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. Usuń komentarz z definicji elementu 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 przetestujesz zachowanie za pomocą sieci Wi-Fi, a następnie wyłączysz 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 tego, kiedy dane muszą być synchronizowane, ale do celów demonstracyjnych użytkownik w tym samouczku musi wyraźnie o to poprosić.

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

Testowanie w trybie offline

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

  2. Dodaj niektóre elementy zadań do wykonania lub oznacz niektóre elementy jako ukończone. Zamknij aplikację na urządzeniu lub symulatorze (wymuszając zamknięcie, jeśli to konieczne) i uruchom ją ponownie. Sprawdź, czy zmiany zostały utrwalone na urządzeniu, ponieważ są one 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 symulatorze. Następnie naciśnij przycisk Odśwież .

  5. Ponownie wyświetl dane TodoItem w portalu Azure. Powinny zostać wyświetlone nowe i zmienione elementy TodoItems.

Dodatkowe zasoby