Android SyncAdapter:从服务器端删除项目时如何同步?

时间:2016-01-09 13:16:54

标签: android android-syncadapter

在我的应用程序中,用户可以订购一些东西,之后他也可以取消它,但是当用户尝试取消时,我使用取消原因列表填充对话框,该列表存储在本地数据库中并使用syncadapter从服务器同步。我们还有管理仪表板,我们的管理员可以在其中添加或删除取消原因。我可以同步新添加的取消原因但是如何告诉syncadapter某些原因已被删除?

当前同步的工作原理。
现在我有一个名为get_cancel_reasons的api,我使用syncadapter命中,并发送last_updated_at参数,该参数在我的取消原因最后一次在本地数据库中更新时通过。从服务器端,我将客户端last_updated_at与我的服务器last_updated_at字段进行比较。如果它落后于服务器,那么我发送新添加的取消原因。现在如何从服务器仪表板中删除一个原因来管理?

我尝试了什么

我没有从服务器中删除原因,而是保留数据和一个标记为无效的标志。但问题是如果数据频繁变化,服务器数据库表中会有很多不必要的数据。

1 个答案:

答案 0 :(得分:1)

我看到两个选项:

  1. 始终发送所有cancel_reasons并从客户端数据库中删除尚未从服务器接收的所有内容。不确定你有多少取消原因,但如果不是很多,我会选择这个。你可以使用ETags和" if-none-match"标题或类似的机制,以避免在没有任何变化的情况下浪费任何数据。

  2. 继续提出标记已删除原因的想法。如果您担心服务器上的数据浪费(这些原因预计会在多长时间内发生变化?)您可以定期删除非常旧的取消原因,如果客户发送last_updated_at日期,则可以回退到1。超过数据库中最早的更新日期。当然,客户应准备好接收完整的回复,而不是在这种情况下的变更集。

  3. 查看RFC 6578,它描述了一种非常类似于WebDAV协议中有效同步的机制。