Поделиться через


Включение автономной синхронизации для мобильного приложения Android

Обзор

В этом руководстве рассматривается функция автономной синхронизации мобильных приложений Azure для Android. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевое подключение отсутствует. Изменения хранятся в локальной базе данных. После возврата устройства эти изменения синхронизируются с удаленной серверной частью.

Если это первый опыт работы с мобильными приложениями Azure, сначала необходимо выполнить руководство по созданию приложения Android. Если вы не используете скачанный проект сервера быстрого запуска, необходимо добавить пакеты расширений доступа к данным в проект. Дополнительные сведения о пакетах расширений сервера см. в статье Работа с пакетом SDK серверного сервера .NET для мобильных приложений Azure.

Дополнительные сведения о функции автономной синхронизации см. в статье автономной синхронизации данных в мобильных приложениях Azure.

Обновление приложения для поддержки автономной синхронизации

При автономной синхронизации вы считываете и записываете данные из таблицы синхронизации (с помощью интерфейса IMobileServiceSyncTable ), которая входит в базу данных SQLite на устройстве.

Для отправки и извлечения изменений между устройством и мобильными службами Azure используется контекст синхронизации (MobileServiceClient.SyncContext), который инициализируется локальной базой данных для хранения данных локально.

  1. В TodoActivity.javaполе закомментируйте существующее определение mToDoTable и раскомментируйте версию таблицы синхронизации:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. В методе onCreate закомментируйте существующую инициализацию и раскомментируйте mToDoTable это определение:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. Закомментируйте refreshItemsFromTable определение results и раскомментируйте это определение:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. Закомментируйте определение refreshItemsFromMobileServiceTable.

  5. Раскомментируйте определение 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. Раскомментируйте определение 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);
     }
    

Тестирование приложения

В этом разделе описано, как проверить поведение с помощью Wi-Fi, а затем отключить WiFi, чтобы создать автономный сценарий.

При добавлении элементов данных они хранятся в локальном хранилище SQLite, но не синхронизируются с мобильной службой, пока не нажимаете кнопку "Обновить ". Другие приложения могут иметь различные требования, касающиеся синхронизации данных, но для демонстрационных целей в этом руководстве пользователь явно запрашивает его.

При нажатии этой кнопки запускается новая фоновая задача. Сначала он отправляет все изменения, внесенные в локальное хранилище с помощью контекста синхронизации, а затем извлекает все измененные данные из Azure в локальную таблицу.

Автономное тестирование

  1. Поместите устройство или симулятор в режим самолета . Это создает автономный сценарий.

  2. Добавьте некоторые элементы ToDo или пометьте некоторые элементы как завершенные. Закройте устройство или симулятор (или принудительно закройте приложение) и перезапустите его. Убедитесь, что изменения сохранены на устройстве, так как они хранятся в локальном хранилище SQLite.

  3. Просмотрите содержимое таблицы Azure TodoItem с помощью средства SQL, например SQL Server Management Studio, или клиента REST, например Fiddler или Postman. Убедитесь, что новые элементы не были синхронизированы с сервером

    + 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. Включите Wi-Fi на устройстве или симуляторе. Затем нажмите кнопку "Обновить ".

  5. Снова просмотрите данные TodoItem на портале Azure. Теперь должны появиться новые и измененные TodoItems.

Дополнительные ресурсы