我想在 Android 应用程序和服务器之间同步数据(如数据库记录、媒体)。如果你看过Evernote或类似的应用程序,你肯定明白我的意思。
Evernote
我有一些问题(假设我们要同步数据库记录):
每个用户都有自己的服务器空间的一部分(例如Evernote或Dropbox)。也许用户通过手机创建新记录并在服务器中创建新记录。 我怎样才能将这些记录匹配在一起? 如果有相同 ID 的记录 你建议我什么算法?
Dropbox
除了 JSON , 还有什么方法可以在手机设备和服务器之间发送数据?
如果 SyncAdapter 和 ContentProvider 可以解决我的问题,请为我解释清楚。(如果您可以向我提供一些示例或教程,或者任何有助于扩大/指导我的搜索的建议或关键字也将不胜感激)。
我将尝试通过解决更大的问题来回答您的所有问题: 如何在网络服务器和 android 应用程序之间同步数据?
在你的网络服务器和安卓应用程序之间同步数据需要你的安卓设备上的几个不同的组件。
这就是您的手机实际存储从网络服务器接收到的数据的方式。实现此目的的一种可能方法是编写您自己的由 Sqlite 数据库支持的自定义 ContentProvider 。 可以在这里找到一个不错的内容提供者教程:http: //thinkandroid.wordpress.com/2010/01/13/writing-your-own- contentprovider/
ContentProvider 定义了一个一致的接口来与您存储的数据进行交互。如果您愿意,它还可以允许其他应用程序与您的数据进行交互。 您的ContentProvider 背后可能是 Sqlite 数据库、缓存或任何任意存储机制。
虽然我当然会推荐使用带有 Sqlite 数据库的 ContentProvider ,但您可以使用任何您想要的基于 java 的存储机制。
这是您用于在网络服务器和 Android 应用程序之间发送数据的格式。目前最流行的两种格式是 XML 和 JSON。选择格式时,您应该考虑可用的序列化库类型。我立即知道有一个很棒的 json 序列化库,叫做 gson:https ://github.com/google/gson ,尽管我确信 XML 存在类似的库。
您将需要某种异步任务,它可以从您的服务器获取新数据并刷新移动内容以反映服务器的内容。每当您对内容进行本地更改并希望反映这些更改时,您还需要通知服务器。Android 提供了 SyncAdapter 模式作为一种轻松解决此模式的方法。您需要注册用户帐户,然后 Android 将为您执行许多魔法,并允许您自动同步。这是一个很好的教程:http ://www.c99.org/2010/01/23/writing-an- android-sync-provider-part-1/
至于如何识别记录是否相同,通常您将创建具有唯一 id 的项目,并将其存储在 android 设备和服务器上。您可以使用它来确保您引用的是相同的参考。此外,您可以存储“updated_at”之类的列属性,以确保您始终获得最新数据,或者您不会意外覆盖新写入的数据。