我想在Android应用程序和服务器之间同步数据(如db记录,媒体)。如果你看过Evernote或类似的应用程序,你肯定能理解我的意思。
我有一些问题(假设我们想要同步DB记录):
Every user has a part of server space for himself (such as Evernote or Dropbox). Maybe the user creates new records by cellphone and creates new records in server. How can I match these records together? If there are records with same ID What algorithms do you suggest me?
Except JSON, Are there any way for send data between cellphone device and server?
If SyncAdapter and ContentProvider can solve my problems, please explain exactly for me. (If you could offer some samples or tutorials to me OR Any advice or keywords to help broaden/guide my search would be appreciated as well).
例如,您想要将表todoTable从MySql同步到Sqlite
首先,在todoTable中为Sqlite和MySql创建一个列名版本(类型INT)
其次,创建一个名为database_version的表,其中一个列名为currentVersion(INT)
在MySql中,当您向todoTable或update item中添加新项时,必须将该项的版本升级+1,同时升级currentVersion
在Android中,当你想要同步时(手动按下同步按钮或运行有周期的服务):
您将发送请求与Sqlite的currentVersion(目前是1)到服务器。
然后在服务器中,你发现MySql中有什么项目的版本值大于Sqlite currentVersion(1),然后响应Android(在这个例子中,项目3与版本2将响应Android)
在SQLite中,您将向todoTable添加或更新新项,并升级currentVersion
@Grantismo提供了一个很好的整体解释。如果你想知道谁实际上在做这些事情,我建议你看看谷歌是如何为谷歌IO应用程序的2014年(它总是值得深入研究这些应用程序的源代码,他们发布。这里有很多值得学习的地方)。
这里有一篇关于它的博客文章:http://android-developers.blogspot.com.br/2014/09/conference-data-sync-gcm-google-io.html
从本质上讲,在应用端:GCM用于发送信号,同步适配器用于数据获取,并与内容提供者进行正确的对话,这将使事情持久(是的,它将DB与应用程序的其他部分直接访问隔离开来)。
另外,如果你想看一下2015年的代码:https://github.com/google/iosched