2016-01-07 2 views
6

1.My Application. Каждые 2 минуты данные вставляются в локальную базу данных (с использованием Azure Offline Sync), затем каждые 5 минут данные синхронизируются с базой данных Azure с фоновым сервисом.Получите результат от Azure, строка вставляется и удаляет данные строки из локальной базы данных после вставки в базу данных Azure

2.Each Row Data После установки на сервер AZURE, я хочу удалить из локальной базы данных.

Мой вопрос:

1.how я могу знать Моя каждая строка Поставлен или нет в сервере. Любой ответ отправит клиенту End from Server. Другое решение? ,

2.Удалить строку, вставленную на Azure Server из Local Sqlite (после получения конформации, вставленной с сервера Azure).

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

Я использую Azure Cloud для сервера.

Link I referred for Offline Azure Sync from Sqlite

ответ

4

Для 1, вы можете реализовать обработчик для перехвата ответов сервера, прежде чем давать эти данные обратно клиенту (см https://github.com/Azure/azure-mobile-apps-android-client/blob/ef4759078cb031de9a5cbb05d07dc52322952ac1/sdk/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.java)

public class MySyncHandler implements MobileServiceSyncHandler { 

@Override 
public JsonObject executeTableOperation(RemoteTableOperationProcessor processor, TableOperation operation) throws MobileServiceSyncHandlerException { 
    try { 
     return operation.accept(processor); 
    } catch (Throwable e) { 
     throw new MobileServiceSyncHandlerException(e); 
    } 
} 

Если операция не бросать, это означает, что HTTP-запрос был успешным, поэтому вы можете перейти к удалению элемента.

Чтобы удалить строку, вы не хотите использовать таблицу синхронизации, так как она будет отслеживать операцию. Для этого вы можете использовать прямое SQL-соединение. Другой вариант - обновить вышеприведенную функцию, чтобы выбросить пользовательскую ошибку вместо возврата. Это позволит ошибке перейти к следующему методу в обработчике (onPushComplete).

С классом TableOperationError его легко отменить и отменить локальный элемент, используя встроенный метод в контексте синхронизации.

Так перебрать getOperationErrors() и для каждого из них, который является пользовательская ошибка, просто вызовите метод cancelAndDiscardItem (https://github.com/Azure/azure-mobile-apps-android-client/blob/ef4759078cb031de9a5cbb05d07dc52322952ac1/sdk/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.java#L283)

Наконец, извлечение данных из локального хранилища осуществляется через SyncTable класса. Методы чтения и запроса в основном являются индентичными для онлайн-версий. Вот пример снят с Android QS:

Query query = QueryOperations.field("complete").eq(val(false)); 
    return mToDoTable.read(query).get(); 
1

Microsoft предоставила incremental sync в прошивкой с использованием идентификатора запроса, который извлекает только те записи, измененные с момента последней синхронизации используя UpdatedAt временную метку записи, то. Может быть, вы могли бы искать, если Microsoft также предоставила такую ​​же функциональность в Android?