我已经实现了支持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。
有什么想法吗?
提前致谢
答案 0 :(得分:0)
但我似乎无法让第二个平板电脑同步以反映新的更改,即不显示已删除的记录。
如Using soft delete in Mobile Services所述:
使用Offline data Sync for Mobile Services功能时,客户端SDK会自动查询已删除的记录并将其从本地数据库中删除。如果未启用软删除,则需要在后端编写其他代码,以便客户端SDK知道要从本地存储中删除哪些记录。否则,客户端本地存储和后端将与这些已删除的记录不一致,并且必须调用客户端方法
PurgeAsync()
以清除本地存储。
我认为您可以在处理拉取操作时利用fiddler来捕获网络跟踪。此外,您可以在构建用于提取数据的查询时添加includeDeleted方法,以便更好地了解此功能。
var pullQuery = mClient.getTable(ToDoItem.class).where().field("complete").eq(false).includeDeleted();
mToDoTable.pull(mPullQuery).get();
此外,有关在移动服务中使用离线数据同步的详细信息,您可以参考here。
<强>更新强>
query参数是一个可选查询,用于过滤结果。
正如How offline synchronization works提到的增量同步:
如果使用非null queryId,Azure Mobile SDK将执行增量同步。每次pull操作返回一组结果时,该结果集中的最新updatedAt时间戳存储在SDK本地系统表中。后续的pull操作仅在该时间戳之后检索记录。
查询名称可以是您选择的任何字符串,但对于您应用中的每个逻辑查询,它必须是唯一的。否则,不同的拉取操作可能会覆盖相同的增量同步时间戳,并且您的查询可能会返回错误的结果。
您可以参考此answer并解决您的问题。