保持用户数据来自在线服务,以便离线观看"在Android应用程序上

时间:2012-01-19 23:50:21

标签: android database sqlite synchronization

我有一个网络服务器,用于托管我在Android平板电脑上构建的应用程序的数据。数据变化相当频繁,但我发现平板电脑和手机并不总是与数据连接,用户已经可以访问他们以前查看过的数据。

我希望应用程序尽可能从网络服务器提取数据,并且当不可能时,从手机上提取SQLite服务器(或任何正确的方法)。

是否已经设置了实施或实践来执行此操作?如果是这样,实现这样一个功能的当前方法是什么?是否可以采用相同的方法对数据进行更改,然后在数据连接恢复时推送这些更改?

2 个答案:

答案 0 :(得分:4)

不确定这是否有帮助,但我有类似的要求,发现一个名为memento数据库的Android应用程序基本上有一个同步按钮,所以它使用手机存储数据,然后同步到谷歌驱动器电子表格,你也可以更新电子表格,当用户在Android上单击同步时,它将更新其本地数据库。这是否适用于多用户环境我不太确定,但您可能能够剖析应用程序或使用类似的方法?

问候

(ps我与我提到的应用无关)

答案 1 :(得分:2)

据我所知,目前还没有一个共同的框架。这里有很多帖子涉及图像缓存,它可以很容易地适应,但我所知道的完全概括或专门用于离线观看。也就是说,大多数解决方案只适用于URL和文件,因此如果您的数据非常简单,它可以相当容易地工作。这在很大程度上取决于您的数据是什么以及您计划如何显示它。如果它包含要在WebView中显示的网页,那么它可能会变得烦人,因为那时你必须遍历链接(包括图像,css,javascript等)并缓存它们。但是,如果您正在处理特定的孤立URL或结构化数据,您可以从中轻松解析所有相关URL,那么它就会容易得多。

这是一个这样的面向图像的解决方案:https://github.com/ZaBlanc/WebImageView

一般方法相当简单。它可能是这样的:

  • 每当您尝试“获取”某个网址时,始终会从缓存中读取该网址
  • 如果你的缓存有它,那么你可以愉快地使用它并在路上
  • 如果您的缓存没有,那么您必须排队请求以异步方式下载文件
  • 文件下载完成后,发送某种通知告诉应用程序处理它。

您还必须处理缓存过期策略以及如何显示数据等内容,但可能只是一个开始。

如果你正在考虑双向同步,那么它将变得更加困难。您必须考虑锁定和冲突(两个人可以同时更新同一个项目吗?如果是,那么会发生什么?),原子性(您是否有相关项目只有在更新/添加时才有意义?),数据验证(如果用户发送错误数据会怎样)以及更多内容。这可能就是为什么没有人提出任何事情(我知道)。它非常有用,但它可能会非常复杂,并且真正涉及客户端和服务器的工作。