观看有关的REST
API使用情况的视频
SyncAdapter。
他们讨论的方法是向数据库添加一组元数据标志列。这使我们可以做三件事。
标记本身允许
SyncAdapter
确定需要更改的行以及这些更改是什么。您如何区分本地创建的行和本地修改的行之间的区别?此外,您如何知道要进行哪个REST API调用?如果您只 删除 一行,那么SyncAdapter
如果数据现在消失了,您如何知道要删除的行呢?而是设置“应该删除”标志,然后在SyncAdapter
运行时知道将删除推送到服务器。这些标志允许您
CursorAdapter
修改创建的视图(例如添加一个Spinner
以显示“此行正在同步”)最后,这些 都没有 指出,这些标志使您可以知道为什么要修改该行。如果未设置任何标志并且行发生更改,则 一定 是由于服务器的更新造成的。因此,无需同步到网络。
因此,这两个工作流程如下:
当地变化
- 应用程序创建新行。行“创建”标志为true。
- ContentProvider存储该行,看到create标志,因此调用
notifyChange(...,true);
- 同步到网络= true(最后一个参数)会
SyncAdapter
触发。 SyncAdapter
扫描数据库,找到设置了创建标志的行并执行适当的服务器 *** 作。成功后,SyncAdapter
清除该标志。(行更新于ContentProvivder
)ContentProvider
看到标志清除,未设置任何标志,因此调用notifyChange(…,false);ContentObserver
s查看标志更改,更新为“同步完成”
所有这些步骤对于更新/删除都是等效的-每个创建/更新/删除的每个同步行都有一个标志。还要注意另一个胜利-
如果“创建”暂时失败怎么办?服务器停机…您如何知道重试?-很简单,您无需清除“创建”标志,而是在15分钟后看到它。
远程变更
SyncAdapter
由于定期同步而触发。SyncAdapter
从服务器获取更新。将更改推送到数据库中。不设置任何标志。ContentProvider
看到缺少标志,知道更改一定来自服务器(或者不是数据库更改需要推送到服务器),因此它调用notifyChange(...,false);
ContentObserver
看到内容更改,因此它们使用新的行数据进行更新
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)