2017-08-16 95 views
0

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

要启用软删除,我已将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

但我似乎无法获得第二个平板电脑进行同步,以反映新的变化,即不显示已删除的记录。

正如提到Using soft delete in Mobile Services如下:

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

我认为您可以利用捕捉网络跟踪处理拉操作。另外,如下所示,在构建用于抽取数据的查询时,可以添加includeDeleted方法,以便更好地理解此功能。

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

此外,对于有关移动服务使用离线数据同步的详细信息,你可以参考here

UPDATE:

查询参数是可选的查询,以筛选结果。

由于How offline synchronization works提及增量同步

如果你使用一个非空queryId,在Azure移动SDK执行增量同步。每当pull操作返回一组结果时,该结果集中的最新updatedAt时间戳就存储在SDK本地系统表中。随后的拉取操作仅在该时间戳后检索记录。

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

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

+0

我真的以为我发现了这个问题。我将同步方法从'mtblSave.pull(null,“tblsave”)。get();'改为'mtblSave.pull(null).get();'并且它将所有更改的记录拖下来。该代码不工作是我认为会工作的增量同步。我的增量同步代码有问题吗?我是否需要实际提出查询? – SliderUK

+0

我更新了我的答案,你可以参考解释。 –

+0

嗨,谢谢你,但我不完全理解你以粗体显示的部分。使用'mtblSave.pull(null,“tblsave”)。get();'是不是一个唯一的'tblSave'的queryid,所以当它再次被调用时它会检查updatedAt?我使用的方法与其他答案中提到的方法有什么不同?await coffeeTable.PullAsync(“allCoffees”,coffeeTable.CreateQuery());'? – SliderUK