Bre*_*nt 27 database cloud android synchronization android-contentprovider
我有一个Android应用程序,维护不同地理位置的本地SQLite数据库.
现在我想将该数据库连接到"云"以完成以下操作:
首次安装应用程序时(或根据要求)初始下载所有内容
已在本地添加的新位置应上传到云端(自动)
应偶尔检查在线数据库的新在线条目,并下载到本地数据库.
我有很多问题要做到这一点.
首先是如何做到这一点.我认为它涉及contentProviders和syncProviders,但我不确定如何.我是否需要在contentProvider中复制我的SQLite数据库,或者我是否在底层设计中犯了错误,直接使用数据库,而不是通过自定义内容提供程序?
其次,位置记录不能简单地从在线数据库中上下复制,因为它们将具有冲突的ID号.我有几个关系表,例如"tag",它将tag-id与location-id相关联.我的tag-id不一定与其他用户tag-id匹配.与位置ID相同.因此,需要在转移中涉及一些逻辑. 应该在哪里/如何妥善处理?那是contentResolver的角色吗?(不确定那是什么)
第三,在2个用户同时添加相同位置(可能具有不同的描述和细节)的情况下会发生什么? 是否有合并这些记录的最佳做法?
最后,构建/托管在线组件的最简单方法是什么? 这部分对我来说都是新的.我可以将master数据库放在公共Dropbox文件夹中,还是需要从头开始构建自定义php web-app?或者是否有预先打包的解决方案可以使这部分更容易?
Ani*_*udh 22
你绝对应该使用ContentProvider
和SyncAdapters
.你应该:
ContentProvider
界面包装数据库功能SyncService
匹配的权限ContentProvider
SyncAdapter
专业化中,您将覆盖onPerformSync()
使用SharedPreferences
存储来跟踪您的同步参数,例如lastSync时间等.
final SharedPreferences syncMeta =
mContext.getSharedPreferences("sync:" + account.name, 0);
long lastSyncTime = syncMeta.getLong(LAST_SYNC, 0);
long lastServerSyncTime = syncMeta.getLong(SERVER_LAST_SYNC, 0);
Run Code Online (Sandbox Code Playgroud)这可以很容易地告诉您它是否是第一次同步,您可以在此处进行初始处理
在此处使用ContentProvider进行数据库操作.ContentProviders提供了一种从应用程序和同步适配器访问数据的统一方式.他们将通知系统更新,以便框架和计划同步.如果您选择这样做,它们也可以作为您的数据与其他应用程序的公共接口.
此外,通过使用SyncService,您可以节省电池电量.如果系统将所有应用程序一起批处理,而不是每个应用程序唤醒系统,系统将使用网络勾选来实现同步操作
最后,
你应该看两个样本.他们几乎涵盖了我解释的一切
这两款应用都使用Google App Engine作为云组件.它很容易上手,所以一定要探索这些选择.
归档时间: |
|
查看次数: |
2707 次 |
最近记录: |