关于ZAKER 融媒体解决方案 合作 加入

在 Android App 和网络服务器之间同步数据

CocoaChina 09-17

我想在Android应用程序和服务器之间同步数据 ( 例如数据库记录 , 媒体 ) . 如果您已经看过 Evernote 或类似的应用程序 , 您当然明白我的意思 .

我有一些问题 ( 想象一下我们想要同步 DB 记录 ) :

> 每个用户都有自己的一部分服务器空间 ( 例如 Evernote 或 Dropbox ) . 也许用户通过手机创建新记录并在服务器中创建新记录 . 我如何将这些记录匹配在一起?如果有相同 ID 的记录你建议我使用哪种算法?

> 除了 JSON, 手机设备和服务器之间有没有办法发送数据?

> 如果 SyncAdapter 和 ContentProvider 可以解决我的问题 , 请完整地为我解释 . ( 如果您可以向我提供一些示例或教程或任何建议或关键字 , 以帮助扩大 / 指导我的搜索也将受到赞赏 ) .

最佳答案

我将尝试通过解决更大的问题来回答您的所有问题:如何在网络服务器和 Android 应用之间同步数据?

在您的网络服务器和 Android 应用程序之间同步数据需要 Android 设备上的几个不同的组件 .

持久存储:

这就是您的手机实际存储从网络服务器接收的数据的方式 . 实现此目的的一种可能方法是编写由 Sqlite 数据库支持的自定义 ContentProvider. 内容提供商的体面教程可以在这里找到:http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

ContentProvider 定义了一个与存储数据交互的一致接口 . 如果您愿意 , 它还可以允许其他应用程序与您的数据进行交互 . ContentProvider 的后面可能是 Sqlite 数据库 ,Cache 或任意存储机制 .

虽然我肯定会建议将 ContentProvider 与 Sqlite 数据库一起使用 , 但您可以使用任何您想要的基于 Java 的存储机制 .

数据交换格式:

这是您用于在 Web 服务器和 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", 以确保您始终获取最新鲜的数据 , 或者您不会意外地写入新写入的数据 .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 android数据库数据

觉得文章不错,微信扫描分享好友

扫码分享