【问题标题】:Mobile devices offline sync with webservice移动设备与网络服务离线同步
【发布时间】:2014-05-13 13:56:40
【问题描述】:

我正在为我正在编写的应用程序开发网络服务。我想让应用离线访问。

我创建了那个 web 服务,这样如果你从 web 服务请求 JSON,你可以给出一个日期: /color/colors/date/2014-03-01T12:00/

如果您不提供日期,您将获得数据库中所有处于活动状态的内容。如果您给出日期,您将只能获得在该日期之后更新的所有内容。

现在我的问题是,如果我从应用程序的网络服务中删除某些内容,那么它将不会被同步,其他设备将永远不会知道它已被删除。

我可以使用我说删除记录但我需要保留每条记录并且无法删除任何记录的字段。

有没有更好的同步方法?或者最好的方法是什么?

【问题讨论】:

  • TL'DR:您同步数据的当前状态。自日期以来没有变化。
  • @Budius 不,我正在尝试仅同步上次更新后更改的数据。但是我在删除当前系统中的数据时遇到了问题。
  • 当我帮助 Ghost 开发这个应用程序时,这里有一些见解。 Web 服务将数据推送到手机。手机应用程序的信息量并不大,而且大部分数据都是异步收集的。我们认为最好的选择是在发生更新时删除并刷新所有表。没有表将超过 200 条记录。另一个问题是:如果我们有 10 个包含 200 条记录的表,这个过程是否会使应用程序减慢到性能太慢的程度?
  • @RobbieVercammen 是的,这是真的 :)

标签: android web-services sync


【解决方案1】:

我认为没有可能检测到已删除条目的更改,除非您发送条目已删除的信息。最佳做法是在表中设置一个整数类型的字段,然后可以在更新时设置此值。您不必仅将其设置为 1 或 0,您可以使用更大的数字(例如,我在 3 月 20 日删除的那个条目上使用了 30,这一天是一个很大的代码逻辑更改。之后我知道什么时候状态整数是 30,然后我在那个日期之后删除了这一行。)这可能是一个愚蠢的例子,但你可以实现自己的逻辑。

【讨论】:

  • 因此,如果您删除一行,您会将一列放在值 30 上。然后所有连接到 Web 服务的平台都知道 30 表示删除。但是,如果您将值放在 30 上,则该行将永远不会被删除?它会永远存在于数据库中吗?这样可以吗?
  • 我明白,但你会知道 30 是 3 个月前的删除,我可以删除所有行,其中删除标志为 30。
  • 所以你缓存了 3 个月的所有内容?然后删除它。如果某个应用在 3 个月内没有更新,那么它就是现在活跃用户?
  • 3 个月只是一个例子..您可以将其缓存多年。数据库中将存储多少数据? 1-200不会出现任何性能问题
【解决方案2】:

这取决于在进行更改时更新其余设备的重要性。

如果它很重要,那么值得为每个设备实施推送通知或类似的东西,让他们了解更新的情况。否则,您只需让其他设备自行轮询服务器以检查更改,并且此轮询的频率或触发将再次取决于它们获得更新的重要性。也许他们只在访问某个活动时才需要更新,因此在这种情况下,您只会在到达该活动的 onResume() 事件时进行轮询

更新

如果您不需要保留已删除记录的历史记录,那您为什么不能将其删除,然后当其余设备更新时,您将全部清除并下载新集?如果这太密集,您将需要引用 id,您可以在表中执行此操作或在字段中使用特殊值(如 null、0 或 -1)来标记它。否则没有办法引用它

【讨论】:

  • 我知道什么时候同步这不是问题,问题是当我删除一条记录时。
  • 啊,所以问题实际上出在服务器端。我更新了我的答案
  • 删除值的表是一个有趣的选择 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多