Android应用离线模式,本地SQLite数据库与远程数据库同步

7
我有一个由Web服务通过Android应用程序操作的PostgreSQL数据库。我想知道为我的应用程序制作"离线模式"的最佳方法是什么。
我的第一个想法是在设备没有网络访问权限时使用SQLite本地数据库。
我想知道是否存在现有工具,可以在设备连接到网络后更轻松地将数据与现有的PostgreSQL数据库进行同步。

你可以尝试使用SyncAdapter:http://developers.androidcn.com/resources/samples/SampleSyncAdapter/index.html - minhaz
3
请注意,如果在两个数据库处于断开状态时数据可以被修改,则没有简单的解决方案。当存在冲突时该怎么做只能由应用程序(或用户)决定。 - Richard Huxton
@minhaz 我学了一点关于SyncAdapter,但我不确定它是否对我想做的事情有用。例如,我的应用程序可能会离线几天,它应该允许用户在没有Web访问的情况下“正常”地使用本地数据工作。一旦设备再次访问互联网,我需要更新/删除/创建数据库中在离线模式下更改的项目。 - Simo
1
现在你有两个问题,一个是使你的应用程序离线工作,另一个是将你的数据库与云同步。最好一次解决一个问题。你必须使用一些临时缓存来跟踪所有保存和完成的工作,并在用户连接到互联网时逐个处理它们。 - minhaz
1个回答

4
这里是一些关于此事的基本想法。
在理想情况下,你会同步一些通用工作元数据,并且你的离线模式将允许仅插入新数据的工作流程。这将使得稍后通过按顺序发布到网络服务并在数据库中标记或完全移除行来相对容易地同步事物。
如果你采用这样的方式,你可能不想把SQLite视为一个关系型数据库管理系统。你可能需要的是一个宽表结构,主要设计用于存储挂起请求,或者可以存储以后发送的JSON负载之类的东西。这意味着你的本地数据库将不是根据你的数据模型设计的,而是根据你的网络服务API设计的。
如果你必须进行更新(覆盖工作流程),那么你需要投入很多精力来解决冲突,但基本上同样适用。你可能需要添加更多信息,如时间戳和其他与解决冲突相关的数据。
从那里开始,你应该能够重复使用你的应用程序API来进行同步,而不是寻找特定的工具来完成它。

谢谢你的回答,我想知道是否有一个神奇的工具可以做到这一点,但现在我几乎可以确定这种“魔法”还不存在。 - Simo
我不确定如果你需要进行双向同步,是否真的有可能实现所谓的“魔法”。虽然有一些解决冲突的方法,但并不是所有情况都适用。对于单向同步,这是相当可行的,但我很难看出为什么你已经在构建的 Web 服务不会更好...... - Chris Travers
目前,这个问题的万能解决方案似乎只存在于Telerik的iOS版本中,而且根据他们的网站,很快也会为Android设备提供。 - Narayanan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接