如何在Android应用程序中同步服务器数据?

时间:2015-11-02 06:30:36

标签: android sqlite realm android-syncadapter couchbase-lite

我正在构建一个Android应用程序,其中涉及列出产品的详细信息。这些产品将是500到1000个项目,并随着时间的推移而发展,从后端服务器进行更改。

为避免每次从服务器获取此大数据以显示列表,需要在本地数据库中保留并通过查询数据库进行显示。

对于持久化数据,我探讨了以下可用方法。

  1. 原生sqlite(使用同步适配器框架同步)
  2. Realm(无法计算如何同步)
  3. Couchbase lite(拥有自己的同步网关)
  4. 但是,为了获得最佳方法,却无法得出任何结论。

    由于数据很大,我们需要通过app离线访问数据,因此同步数据变得非常重要。我还在学习这些东西。

    有人可以指导我在正确的方向设计存储数据并在后端发生变化时同步数据吗?

    修改

    虽然在Android应用程序中有不同的视图或多种方式来设计数据同步,但想了解一些事情:

    1. 存储选项
      一个存储在本机sqlite或NoSQL数据库中,如Realm,CouchDB Lite?

    2. 同步选项
      一个对于同步,我是否需要让sqlite db结构与服务器db相同?
      b。可以将Realm与Sync适配器结合使用,还是Realm还有其他任何同步选项?

    3. 数据库设计
      一个由于每个产品项目在单击时都会显示更多详细信息,因此需要使用其他API调用获取产品详细信息,或者将所有这些详细信息包含在初始API调用中?要遵循的设计方法是什么?

3 个答案:

答案 0 :(得分:2)

  

由于数据很大,我们需要离线访问数据   通过应用程序,同步数据变得非常重要。我仍在学习   这些东西。

所以我对这个问题的想法是使用 Google Cloud Messaging ,因为服务器会向所有客户端应用发送信号(如果服务器数据库有变化)更新其本地数据库。

首先,当应用程序首先运行时,所有产品都将被加载并保存到应用程序中,或者您可以根据需要显示它们。

因此,当有更新或新产品条目时,服务器会向所有客户发送推送消息,告诉他们新产品已添加到服务器(您可以向客户端发送4KB最大数据,在这种情况下,您应该发送产品id)

然后您可以从服务器获取数据(按产品ID)并更新客户端本地数据库。

https://developers.google.com/cloud-messaging/

对于数据库,请参阅此链接: -

Should I use sqlite?

答案 1 :(得分:1)

您可以使用Native sqlite选项(使用Sync适配器框架同步)。根据您的要求,我猜您还需要登录帐户以列出产品,以便同步适配器也将负责身份验证。 您可以查看http://developer.android.com/training/sync-adapters/creating-sync-adapter.html了解相关详细信息。

所以方法可以 1)当您启动应用程序时,检查是否已为您的应用程序创建帐户,如果没有,请创建一个新帐户并配置定期同步以启动。 2)同步后,它将把数据存储在sqlite数据库中。 3)使用cursorLoader,您将从sqlite中获取数据并将其显示在UI上。

即使没有网络连接,这也允许用户浏览产品。您可以修改查询以仅获取特定数量的产品,并使用回收视图显示列表中的项目。

我觉得有一个更重要的一点就是不要从服务器上获取整个数据,因为你提到可以有500-1000个以上的产品,因为总有这样的情况用户可能无法浏览所有产品并获取如此大的数据数据量将从用户数据包中消耗更多数据字节,显然他/她从不想要同时经常发出网络请求将永远不会允许用户设备进入待机模式,并且设备电池将大量耗尽每个网络叫它让设备通电大约半分钟。

因此,现在决定在间隔数量上提取的产品数量的某些标准,这些标准将处理上述缺点。这肯定会让用户满意,你的应用程序会更有效率。

实例化您的适配器时P.s传递0表示flags属性,因此如果数据已更改init,Loader将负责要求您的数据库。

希望这可以帮助您决定进一步的步骤。

干杯。

答案 2 :(得分:0)

试用firebase数据库,它提供了android客户端,通过它可以非常轻松地同步数据。 有关详细信息,请查看

https://www.firebase.com/docs/android/guide/offline-capabilities.html