我想在Android应用程序和服务器之间同步数据(如数据库记录、媒体).如果你看过Evernote个或类似的应用程序,你肯定明白我的意思.

我有一些问题(假设我们要同步数据库记录):

  1. 每个用户都有一部分服务器空间供自己使用(例如EvernoteDropbox).可能用户通过手机创建新记录,并在服务器上创建新记录.How can I match these records together?如果存在具有相同ID的记录What algorithms do you suggest me?

  2. 除了JSONAre there any way for send data between cellphone device and server?

  3. 如果SyncAdapterContentProvider能解决我的问题,请给我解释清楚.(如果您能提供一些样本或教程给我,或任何建议或关键字,以帮助扩大/指导我的搜索也将不胜感激).

推荐答案

我将通过回答一个更大的问题来回答你们所有的问题:How can I sync data between a webserver and an android app?


在Web服务器和安卓应用程序之间同步数据需要安卓设备上有几个不同的组件.

永久存储:

这就是手机实际存储从网络服务器接收的数据的方式.实现这一点的一种可能方法是编写自己的定制ContentProvider,并由Sqlite数据库支持.一个内容Provider 的不错的教程可以在这里找到:http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

ContentProvider定义了一个与存储数据交互的一致接口.如果需要,它还可以允许其他应用程序与您的数据交互.在ContentProvider的背后可能是Sqlite数据库、缓存或任何任意存储机制.

虽然我当然会推荐使用带有Sqlite数据库的ContentProvider,但您可以使用您想要的任何基于java的存储机制.

数据交换格式:

这是用于在Web服务器和android应用程序之间发送数据的格式.现在最流行的两种格式是XML和JSON.在 Select 格式时,应该考虑可以使用哪种序列化库.我马上就知道有一个很棒的json序列化库,名为gson:https://github.com/google/gson,尽管我相信XML也有类似的库.

同步服务

您需要某种异步任务,它可以从服务器获取新数据,并刷新移动内容以反映服务器的内容.当您对内容进行本地更改并希望反映这些更改时,您还需要通知服务器.Android提供了SyncAdapter模式,可以轻松解决这种模式.你需要注册用户帐号,然后安卓会为你带来很多魔力,并允许你自动同步.这里有一个很好的教程:http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/


至于如何识别记录是否相同,通常您将创建具有唯一ID的项目,并将其存储在Android设备和服务器上.您可以使用它来确保您引用的是相同的引用.此外,您可以存储"UPDATED_AT"之类的列属性,以确保始终获得最新的数据,否则不会意外覆盖新写入的数据.

Android相关问答推荐

如何在Jetpack导航中不显示目的地?

Android Studio中的Kotlin版本不兼容错误:需要元数据1.9.0,但找到1.6.0

无法将Kotlin序列化添加到Android项目

为什么柱子的高度不都一样?

在一列中垂直对齐两个框

FireBase Android ChildEventListener在被规则拒绝时触发(RTDB)

未解析的引用:视图模型

更改活动(上下文)对接收到的uri的访问权限的影响?

Android Compose - 为什么 Canvas 中的drawText在底部被切断而不是在顶部?

使用 Jetpack Compose 在 Android TV 上启用系统声音

页面标题未显示在内容页面上

是否可以在 compose 中使用三次贝塞尔曲线进行动画?

具有数据库和升级潜力的移动应用程序开发(Android)供朋友使用

服务似乎在启动时忽略传递的变量

React-native 3D对象渲染

如何在 Jetpack Compose 中设置卡片高度

Jetpack 组合千位分隔符视觉转换,也适用于小数

如何将文本组合放在行中,一个具有可变宽度的组合

ObjectBox,如何在冲突中放弃一切迁移?

在 android-billing-5.0 中获取 ProductDetails 价格