在Android ContentProvider中从网络同步时防止网络同步循环

在Android ContentProvider中从网络同步时防止网络同步循环,第1张

在Android ContentProvider中从网络同步时防止网络同步循环

观看有关的REST
API使用情况的视频

SyncAdapter

他们讨论的方法是向数据库添加一组元数据标志列。这使我们可以做三件事。

  1. 标记本身允许

    SyncAdapter
    确定需要更改的行以及这些更改是什么。您如何区分本地创建的行和本地修改的行之间的区别?此外,您如何知道要进行哪个REST API调用?如果您只 删除 一行,那么
    SyncAdapter
    如果数据现在消失了,您如何知道要删除的行呢?而是设置“应该删除”标志,然后在
    SyncAdapter
    运行时知道将删除推送到服务器。

  2. 这些标志允许您

    CursorAdapter
    修改创建的视图(例如添加一个
    Spinner
    以显示“此行正在同步”)

  3. 最后,这些 都没有 指出,这些标志使您可以知道为什么要修改该行。如果未设置任何标志并且行发生更改,则 一定 是由于服务器的更新造成的。因此,无需同步到网络。

因此,这两个工作流程如下:

当地变化

  1. 应用程序创建新行。行“创建”标志为true。
  2. ContentProvider存储该行,看到create标志,因此调用
    notifyChange(...,true);
  3. 同步到网络= true(最后一个参数)会
    SyncAdapter
    触发。
  4. SyncAdapter
    扫描数据库,找到设置了创建标志的行并执行适当的服务器 *** 作。成功后,
    SyncAdapter
    清除该标志。(行更新于
    ContentProvivder
  5. ContentProvider
    看到标志清除,未设置任何标志,因此调用notifyChange(…,false);
  6. ContentObserver
    s查看标志更改,更新为“同步完成”

所有这些步骤对于更新/删除都是等效的-每个创建/更新/删除的每个同步行都有一个标志。还要注意另一个胜利-
如果“创建”暂时失败怎么办?服务器停机…您如何知道重试?-很简单,您无需清除“创建”标志,而是在15分钟后看到它。

远程变更

  1. SyncAdapter
    由于定期同步而触发。
  2. SyncAdapter
    从服务器获取更新。将更改推送到数据库中。不设置任何标志。
    ContentProvider
    看到缺少标志,知道更改一定来自服务器(或者不是数据库更改需要推送到服务器),因此它调用
    notifyChange(...,false);
  3. ContentObserver
    看到内容更改,因此它们使用新的行数据进行更新


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5488043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存