27

我有一个android应用程序,它维护着一个不同地理位置的本地SQLite数据库。Android同步用户之间的数据

现在,我想该数据库连接到“云”来完成以下任务:

  • 一切的初始下载,当应用程序首次安装(或收费)

  • 本地添加的新位置应自动上传到云端

  • 在线数据库应偶尔检查新的在线条目并下载到本地数据库。

我在完成这个过程中遇到了很多问题。

第一个只是怎么办。我认为它涉及contentProviders和syncProviders,但我不确定如何。我是否需要在contentProvider中复制我的SQLite数据库,或者我是否在底层设计中直接使用数据库而不是通过自定义内容提供程序发生错误?

其次,位置记录不能简单地从联机数据库上下复制,因为它们将具有冲突的ID号。我有几个关系表,比如将tag-id与location-id相关联的“tags”。我的标签ID不一定会与其他用户的标签ID匹配。与位置ID相同。所以需要在转移中涉及一些逻辑。 在哪里/如何妥善处理?这是contentResolver的角色吗? (不知道那是真的)

第三,在2个用户同时添加相同位置(可能具有不同的描述和细节)的情况下会发生什么? 这些记录是否有合并的最佳做法?

最后,构建/托管在线组件的最简单方法是什么?这部分对我来说都是新手。我可以将主数据库放在公共保管箱文件夹中,还是需要从头开始构建自定义的php网络应用程序?还是有预先打包的解决方案,可以使这部分更容易?

+0

我看到3年前问过的问题,并有一个可接受的答案。您能否详细说明您需要获得更多关于赏金的信息? – RocketRandom

回答

22

您应该一定使用ContentProviderSyncAdapters。你应该:

  • ContentProvider接口
  • 设置一个SyncService匹配的ContentProvider
  • 权力在你SyncAdapter专业化包装你的数据库功能,你将覆盖onPerformSync()
  • 使用SharedPreferences存储来保存跟踪你的同步参数,例如lastSync时间等。

    final SharedPreferences syncMeta = 
            mContext.getSharedPreferences("sync:" + account.name, 0); 
    long lastSyncTime = syncMeta.getLong(LAST_SYNC, 0); 
    long lastServerSyncTime = syncMeta.getLong(SERVER_LAST_SYNC, 0); 
    
  • 这可以很容易地告诉你,如果它的第一个同步,你可以在这里做初步处理

  • 在这里你会写你的算法,同步即单向/双向。
  • 我发现它有助于在您的Android记录中记录时间戳和服务器数据库ID以帮助进行同步。这可以帮助您实现合并策略。
  • 在此处使用ContentProvider进行数据库操作。 ContentProviders提供统一的方式来访问您的应用程序中的数据以及同步适配器。他们会通知系统的更新,以便框架和计划同步。如果您选择这样做,它们也可以作为您的数据与其他应用程序的公共接口。

  • 另外,通过使用SyncService,您可以节省电池电量。该系统将使用网络发痒踢同步操作和其最好的,如果它们是为唤醒系统

最后,所有的应用程序,而不是每个应用程序分批在一起

有两个样品,你应该看看在。他们几乎面面俱到我解释

  1. JumpNote - http://code.google.com/p/jumpnote/source/browse/
  2. SampleSyncAdapter - http://developer.android.com/resources/samples/SampleSyncAdapter/index.html

这两个应用程序使用谷歌应用程序引擎的云组件。它很容易上手,所以一定要探索这个选项。

+0

感谢您的样品。你知道任何涵盖这个的在线教程吗? (代码很棒,但需要一段时间才能完成),而developer.android.com页面没有多少说明。 – Brent

+0

我在这里看到一个2部分系列 - http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/。第2部分更相关。该教程使用自定义帐户。您只能依靠com.google帐户。 – Anirudh

-1

首先在android中创建一个本地数据库。并保存位置详细信息。保存后发送到云/服务器数据库。

下一个偶尔需要U同步哪个云/服务器数据库。所以在android中编写一个Service需要采取特定的时间间隔并与clound/server DB同步。

合并,所以在表中的时间戳。并检查时间戳并相应地更新。

相关问题