想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
3年前关闭。
Improve this question
我想在Android App和服务器之间同步数据(例如db记录,媒体)。如果您看过
Evernote
或类似的应用程序,那么您当然理解我的意思。我有一个问题(想像我们要同步数据库记录):
Evernote
或Dropbox
)。也许用户通过手机创建新记录并在服务器中创建新记录。 如何将这些记录匹配在一起? 如果存在具有相同ID的记录,您建议我使用什么算法? 最佳答案
我将通过解决一个更大的问题来回答您所有的问题:如何在网络服务器和android应用之间同步数据?
在您的网络服务器和android应用之间同步数据需要在android设备上使用几个不同的组件。
永久存储:
这是电话实际存储从网络服务器接收的数据的方式。实现此目的的一种可能方法是编写自己的由Sqlite数据库支持的自定义ContentProvider。可以在这里找到内容提供商的不错的教程:http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/
ContentProvider定义一个一致的接口(interface)来与您存储的数据进行交互。如果需要,它还可以允许其他应用程序与您的数据进行交互。 ContentProvider的后面可以是Sqlite数据库,缓存或任何任意存储机制。
虽然我当然建议将ContentProvider与Sqlite数据库一起使用,但是您可以使用所需的任何基于Java的存储机制。
数据交换格式:
这是您用来在网络服务器和android应用之间发送数据的格式。如今,两种最受欢迎的格式是XML和JSON。选择格式时,应考虑可用的序列化库类型。我马上就知道,有一个很棒的json序列化库叫gson:https://github.com/google/gson,尽管我确定XML存在类似的库。
同步服务
您将需要某种异步任务,该任务可以从服务器中获取新数据并刷新移动内容以反射(reflect)服务器的内容。您还希望在对内容进行本地更改并反射(reflect)这些更改时通知服务器。 Android提供了SyncAdapter模式作为轻松解决此模式的一种方法。您需要注册用户帐户,然后Android会为您执行很多操作,并允许您自动同步。这是一个很好的教程:http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/
至于如何确定记录是否相同,通常会创建具有唯一ID的项目,并将其存储在android设备和服务器上。您可以使用它来确保引用相同的引用。此外,您可以存储“updated_at”之类的列属性,以确保始终获取最新数据,或者不会意外覆盖新写入的数据。