从Azure获取结果插入行并在Azure数据库中插入后从本地数据库中删除行数据

时间:2016-01-07 07:29:20

标签: android azure azure-storage azure-mobile-services

1.我的应用程序是每2分钟数据插入本地数据库(使用Azure脱机同步),然后每5分钟数据与后台服务同步到Azure数据库。

2.在AZURE服务器中插入后的每行数据,我想从本地数据库中删除。

我的问题

1.我怎么知道我的每一行都是在服务器中插入的。任何响应都将从服务器发送回客户端。还有其他解决方案吗?

2.删除从本地Sqlite在Azure服务器中插入的行(在从Azure服务器插入后获得构造之后)。

此外,我想使用Azure方法检索本地数据库中保存的数据。

我正在使用Azure Cloud for Server End。

Link I referred for Offline Azure Sync from Sqlite

2 个答案:

答案 0 :(得分: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 :(得分:1)

Microsoft已使用查询ID在 iOS 中提供了incremental sync仅检索自上次同步后修改的记录 使用记录' s UpdatedAt时间戳。也许你可以搜索微软是否也在android中提供了相同的功能?