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



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

为了避免每次从服务器中获取如此大的数据来显示列表,需要将其保存在本地数据库中,并通过从数据库中查询来显示。

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

  1. 本机sqlite(使用同步适配器框架进行同步)
  2. Realm(不知道如何同步)
  3. Couchbase-lite(有自己的同步网关)

但还并没有得出任何可能的最佳方法的结论。

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

当后端发生变化时,有人能指导我设计存储数据和同步数据的正确方向吗?

编辑:

尽管在android应用程序中有不同的视图或多种设计数据同步的方法,但需要了解以下几点:

  1. 存储选项
    a.存储在本地sqlite或NoSQL数据库中,如Realm、CouchDB Lite?

  2. 同步选项
    a.对于同步,我是否需要具有与服务器数据库相同的sqlite数据库结构?
    b.Realm可以与同步适配器结合使用吗?或者Realm是否有其他同步选项?

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

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

因此,我对这个问题的想法是使用谷歌云消息,因为服务器将向所有客户端应用程序发送信号(如果服务器数据库发生更改)以更新其本地数据库。

首先,当应用程序开始运行时,所有产品都将加载并保存到应用程序中,或者您可以随心所欲地显示它们。

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

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

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

有关数据库,请参阅此链接:-

我应该使用sqlite吗?

您可以选择Native sqlite选项(使用sync适配器框架同步)。根据您的要求,我想您也需要帐户登录来列出产品,这样同步Adapater也会负责身份验证。你可以检查一下http://developer.android.com/training/sync-adapters/creating-sync-adapter.html了解更多详情。

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

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

我认为更重要的一点是,不要像你提到的那样从服务器上获取全部数据,可能会有500-1000多种产品,因为用户可能不会浏览所有产品,获取如此大量的数据会消耗用户数据包中更多的数据字节,而这显然是他/她不想同时频繁发出网络请求的将永远不允许用户设备进入待机模式,并且设备电池将大量耗尽,因为每次网络呼叫都会使设备通电约半分钟。

因此,现在决定一些关于在一定间隔内提取的产品数量的标准,这些标准将解决上述缺点。这肯定会让用户感到高兴,你的应用程序会更有效率。

p.s在实例化Adapter时为flags属性传递0,因此如果数据已更改init,Loader将负责要求您的DB。

希望这能帮助你决定下一步行动。

干杯。

试试firebase数据库,它提供了android客户端,通过它可以很容易地同步数据。有关更多详细信息,请查看

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

最新更新