在 Azure 插入一行数据后获取结果,并从本地数据库中删除已插入到 Azure 数据库的行数据。

7

1. 我的应用程序每两分钟将数据插入到本地数据库中(使用Azure离线同步),然后每五分钟使用后台服务将数据与Azure数据库同步。

2. 每行数据插入到AZURE服务器后,我希望从本地数据库中删除。

我的问题

1.如何知道我的每行是否已经插入到服务器。 服务器是否会向客户端发送任何响应?否则有其他解决方案吗?

2.在从Azure服务器获得确认后(已插入),从本地Sqlite中删除已插入的行。

还要使用Azure方法检索保存在本地数据库中的数据。

我正在使用Azure云作为服务器端。

我参考了离线Azure Sync from Sqlite的链接

2个回答

4

对于第一点,您可以实现自己的处理程序,在将数据返回给客户端之前拦截服务器响应(请参阅: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

微软已经在iOS中使用查询ID提供了增量同步,它可以使用记录的UpdatedAt时间戳检索自上次同步以来修改过的记录。也许你可以搜索一下微软是否在Android中也提供了相同的功能?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接