【问题标题】:Android Azure Mobile Services Offline Sync Soft DeleteAndroid Azure 移动服务离线同步软删除
【发布时间】:2017-08-17 18:00:06
【问题描述】:

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

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

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

        } catch (Exception exception) {
            exception.printStackTrace();
            return false;
        }

我在 Azure SQL Server 中使用 .NET 后端。

有什么想法吗?

提前致谢

【问题讨论】:

    标签: android .net azure soft-delete


    【解决方案1】:

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

    正如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

    更新:

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

    正如How offline synchronization works 提到的增量同步

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

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

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

    【讨论】:

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