Android Azure Mobile Services Offline Sync Soft Delete



我已经实现了一个支持Azure移动服务和离线同步的Android应用程序。我一直在用两种不同的设备进行测试。我在第一台设备上执行删除操作(软删除(,工作正常。然后我让它同步,检查服务器端记录"已删除"列是否标记了"true"。但是我似乎无法同步第二个平板电脑以反映新的更改,即不显示已删除的记录。

为了启用软删除,我已将 enableSoftDelete: true 添加到 Azure 上应用服务上的表控制器中。在删除过程方面,我没有触及我的应用程序,但下面是一个典型的删除:

Save save = getSave(SaveID);
try {
mtblSave.delete(save);
return true;
} catch (Exception exception) {
exception.printStackTrace();
return false;
}

我正在将.NET后端与Azure SQL Server一起使用。

有什么想法吗?

提前致谢

但我

似乎无法同步第二个平板电脑以反映新的更改,即不显示已删除的记录。

如在移动服务中使用软删除,如下所示:

使用移动服务的离线数据同步功能时,客户端 SDK 会自动查询已删除的记录并将其从本地数据库中删除。如果未启用软删除,则需要在后端编写其他代码,以便客户端 SDK 知道要从本地存储中删除哪些记录。否则,客户端本地存储和后端将与这些已删除的记录不一致,并且必须调用客户端方法PurgeAsync()来清除本地存储。

我假设您可以在处理拉取操作时利用 fiddler 来捕获网络跟踪。此外,在构造用于拉取数据的查询时,可以添加 includeDeleted 方法,如下所示,以便更好地了解此功能。

var pullQuery = mClient.getTable(ToDoItem.class).where().field("complete").eq(false).includeDeleted();
mToDoTable.pull(mPullQuery).get();

此外,有关在移动服务中使用脱机数据同步的更多详细信息,可以参考此处。

更新:

查询参数是用于筛选结果的可选查询。

正如脱机同步的工作原理所提到的增量同步

如果使用非空查询 ID,Azure 移动 SDK 将执行增量同步。每次拉取操作返回一组结果时,该结果集的最新更新时间戳都会存储在 SDK 本地系统表中。后续拉取操作仅检索该时间戳之后的记录。

查询名称可以是你选择的任何字符串,但对于应用中的每个逻辑查询必须是唯一的。 否则,不同的拉取操作可能会覆盖相同的增量同步时间戳,并且查询可能会返回不正确的结果。

您可以参考此答案并解决您的问题。

最新更新