Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Azure移动服务离线同步软删除_Android_.net_Azure_Soft Delete - Fatal编程技术网

Android Azure移动服务离线同步软删除

Android Azure移动服务离线同步软删除,android,.net,azure,soft-delete,Android,.net,Azure,Soft Delete,我已经实现了一个支持Azure移动服务和离线同步的Android应用程序。我一直在用两种不同的设备测试它。我在第一台设备上执行了删除操作(软删除),效果正常。然后我让它同步,检查服务器端记录,删除的列是否标记为“true”。但我似乎无法让第二台平板电脑同步以反映新的更改,即不显示已删除的记录 为了启用软删除,我在Azure应用程序服务的表控制器中添加了enableSoftDelete:true。就删除过程而言,我没有接触过我的应用程序,但下面是一个典型的删除: Save save = g

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

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

    Save save = getSave(SaveID);
try {
            mtblSave.delete(save);
            return true;

        } catch (Exception exception) {
            exception.printStackTrace();
            return false;
        }
我正在将.NET后端与Azure SQL Server一起使用

有什么想法吗

提前谢谢

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

如下所述:

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

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

var pullQuery = mClient.getTable(ToDoItem.class).where().field("complete").eq(false).includeDeleted();
mToDoTable.pull(mPullQuery).get();
此外,有关在移动服务中使用脱机数据同步的更多详细信息,请参阅

更新:

查询参数是筛选结果的可选查询

如前所述,增量同步:

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

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


您可以参考此文档并对问题进行故障排除。

我实际上认为我已经找到了问题所在。我从
mtblSave.pull(null,“tblsave”).get()更改了同步方法
to
mtblSave.pull(null.get()并将所有更改的记录拖下来。不起作用的代码是用于增量同步的,我认为这会起作用。我的增量同步代码有问题吗?我真的需要提出疑问吗?我更新了我的答案,你可以参考解释。嗨,谢谢你,但我不完全理解你用粗体写的部分。使用
mtblSave.pull(null,“tblsave”).get()
这不是唯一的'tblSave'查询ID吗?因此,当再次调用它时,它将检查updatedAt?我使用的方法与您在另一个答案
wait coffeeTable.PullAsync(“allCoffees”,coffeeTable.CreateQuery())中提到的方法有什么不同?另一期的代码由c#编写。第一个参数是queryid,第二个参数是查询。我假设用于存储最新updateat时间戳的表结构是相同的。您的代码看起来不错,但正如您所说,增量同步无法正常工作,我只是为您添加了一些注释和方法来查找此问题。我已开始使用azure移动服务调试,传出查询如下所示
https://[APPNAME]。azurewebsites.net/tables/tblsave?$filter=updatedAt%20ge%20(datetimeoffset%272017-08-16T16:17:11.516Z%27)和$top=50和$orderby=updatedAt%20asc
。理论上,这应该在8月16日17时16:17之后检索记录,对吗?肯定有比这更新的记录,但我什么也没有得到。有什么想法吗?