Включение автономной синхронизации для мобильного приложения Android
Обзор
В этом учебнике рассматривается функция автономной синхронизации мобильных приложений Azure для Android. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просмотр, добавление или изменение данных, даже если отсутствует сетевое подключение. Изменения сохраняются в локальной базе данных. Как только устройство возвращается в режим подключения к сети, эти изменения синхронизируются с удаленной внутренним сервером.
Если вы впервые работаете с мобильными приложениями Azure, сначала ознакомьтесь с руководством Создание приложения Android. Если вы не используете скачанный проект быстрого запуска сервера, в проект необходимо добавить пакет расширений доступа к данным. Дополнительные сведения о пакетах расширений для сервера см. в статье Работа с пакетом SDK для внутреннего сервера .NET для мобильных приложений Azure.
Дополнительные сведения о функции автономной синхронизации см. в статье Синхронизация автономных данных в мобильных приложениях Azure.
Обновление приложения для поддержки синхронизации автономных данных
При включенной синхронизации автономных данных операции чтения и записи осуществляются с помощью таблицы синхронизации (с помощью интерфейса IMobileServiceSyncTable), которая является частью базы данных SQLite на вашем устройстве.
Для принудительной отправки изменений на устройстве в мобильные службы Azure и получения изменений из мобильных служб используйте контекст синхронизации (MobileServiceClient.SyncContext), который инициализируется с помощью локальной базы данных.
В
TodoActivity.java
закомментируйте существующее определениеmToDoTable
и раскомментируйте версию таблицы синхронизации.private MobileServiceSyncTable<ToDoItem> mToDoTable;
В методе
onCreate
закомментируйте существующую инициализациюmToDoTable
и раскомментируйте следующее определение.mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
В
refreshItemsFromTable
закомментируйте определениеresults
и раскомментируйте следующее определение.// Offline Sync final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
Закомментируйте определение
refreshItemsFromMobileServiceTable
.Раскомментируйте определение
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(); }
Раскомментируйте определение
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 в локальную таблицу.
Тестирование в автономном режиме
Переведите устройство или эмулятор в режим В самолете. Это позволит смоделировать автономный сценарий.
Добавьте несколько элементов TODO или пометьте некоторые элементы как завершенные. Выйдите из эмулятора (или принудительно закройте приложение) и перезапустите его. Убедитесь, что изменения на устройстве по прежнему отображаются (так как они хранятся в локальном хранилище SQLight).
Просмотрите содержимое таблицы 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*.
Включите Wi-Fi в эмуляторе или на устройстве. Затем нажмите кнопку Обновить .
Снова просмотрите данные TodoItem на портале Azure. Должны отображаться как новые, так и измененные TodoItem.
Дополнительные ресурсы
- Автономная синхронизация данных в мобильных приложениях Azure
- Облачное покрытие: автономная синхронизация в мобильных службах Azure (примечание: видео рассказывает о мобильных службах, однако точно так же автономная синхронизация работает в мобильных приложениях Azure)