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

ash*_*ays 5 database sqlite android synchronization

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

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

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

kab*_*uko 2

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

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

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

  • 任何时候你尝试“获取”一个 URL,你总是从缓存中读取它
  • 如果你的缓存有它那么你就可以愉快地使用它并继续你的旅程
  • 如果你的缓存没有它,那么你必须排队请求异步下载文件
  • 文件下载完成后,发送某种通知以告诉应用程序处理它。

您还必须处理诸如缓存过期策略以及如何显示数据之类的问题,但这可能是一个开始。

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