Closed. This question needs to be more focused。它当前不接受答案。












想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。

3年前关闭。



Improve this question




我想在Android App和服务器之间同步数据(例如db记录,媒体)。如果您看过Evernote或类似的应用程序,那么您当然理解我的意思。

我有一个问题(想像我们要同步数据库记录):
  • 每个用户都有自己的一部分服务器空间(例如EvernoteDropbox)。也许用户通过手机创建新记录并在服务器中创建新记录。 如何将这些记录匹配在一起? 如果存在具有相同ID的记录,您建议我使用什么算法?
  • 除JSON外,是否可以在手机设备和服务器之间发送数据?
  • 如果SyncAdapter和ContentProvider可以解决我的问题,请为我详细解释。 (如果您可以向我提供一些示例或教程,或者任何有助于扩大/指导我的搜索的建议或关键字,也将不胜感激)。
  • 最佳答案

    我将通过解决一个更大的问题来回答您所有的问题:如何在网络服务器和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”之类的列属性,以确保始终获取最新数据,或者不会意外覆盖新写入的数据。

    10-08 07:10
    查看更多