Android在用户之间同步数据
我有一个android应用程序,可以维护不同地理位置的本地SQLite数据库 现在,我想将该数据库连接到“云”,以完成以下任务:Android在用户之间同步数据,android,database,synchronization,cloud,android-contentprovider,Android,Database,Synchronization,Cloud,Android Contentprovider,我有一个android应用程序,可以维护不同地理位置的本地SQLite数据库 现在,我想将该数据库连接到“云”,以完成以下任务: 首次安装应用程序时(或根据要求)首次下载所有内容 本地添加的新位置应上传到云(自动) 应偶尔检查在线数据库中的新在线条目,并将其下载到本地数据库中 我在完成这项工作时遇到了很多问题 第一个问题就是如何做。我认为这涉及到内容提供者和同步提供者,但我不确定如何进行。我是否需要在contentProvider中复制我的SQLite数据库,或者我在底层设计中犯了一个错误,
- 首次安装应用程序时(或根据要求)首次下载所有内容
- 本地添加的新位置应上传到云(自动)
- 应偶尔检查在线数据库中的新在线条目,并将其下载到本地数据库中
最后,构建/托管在线组件的最简单方法是什么?这部分对我来说是全新的。我可以将主数据库放在公共dropbox文件夹中,还是需要从头构建一个定制的php web应用程序?或者是否有一个预打包的解决方案可以使这一部分变得更简单?您肯定应该使用
ContentProvider
和SyncAdapters
。你应该:
- 使用
界面包装数据库功能ContentProvider
- 设置与
ContentProvider的权限匹配的
SyncService
- 在您的
专用化中,您将覆盖SyncAdapter
onPerformSync()
- 使用
存储来跟踪同步参数,例如上次同步时间等SharedReferences
final SharedPreferences syncMeta = mContext.getSharedPreferences("sync:" + account.name, 0); long lastSyncTime = syncMeta.getLong(LAST_SYNC, 0); long lastServerSyncTime = syncMeta.getLong(SERVER_LAST_SYNC, 0);
- 这可以很容易地告诉您这是第一次同步,您可以在这里进行初始处理
- 您将在此处编写同步算法,即单向/双向
- 我发现在Android记录中记录时间戳和服务器数据库ID有助于同步。这可以帮助您制定合并策略
- 在这里使用ContentProvider进行DB操作。ContentProviders提供了从应用程序以及同步适配器访问数据的统一方式。他们将通知系统更新,以便框架和计划同步。如果您选择这样做,它们还可以作为您的数据到其他应用程序的公共接口
- 此外,使用SyncService可以节省电池电量。如果将所有应用程序的同步操作批处理在一起,而不是每个应用程序唤醒系统,系统将使用网络提示来启动同步操作,并达到最佳效果
这两个应用程序都使用Google App Engine作为云组件。这很容易开始,所以一定要探索这些选项。首先在android中创建一个本地数据库。和您的保存位置详细信息。保存后发送到云/服务器数据库 接下来,您需要同步哪个云/服务器数据库。因此,在android中编写一个服务,比如使用特定的时间间隔并与clound/server DB同步
合并,所以在表中设置一个时间戳。并检查时间戳并相应更新。谢谢您提供的示例。你知道有任何在线教程涵盖这一点吗?(代码很好,但需要一段时间才能看完),而developer.android.com页面上的内容也不多。第2部分更相关。该教程使用自定义帐户。你可以依赖com.google账户。我知道这个问题是3年前提出的,并且有一个公认的答案。你能详细说明一下你还需要什么样的赏金信息吗?