Включение автономной синхронизации для мобильного приложения 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, а затем отключим Wi-Fi и рассмотрим автономный сценарий.

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

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

Тестирование в автономном режиме

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

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

  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. Должны отображаться как новые, так и измененные TodoItem.

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