【问题标题】:How to share and sync android sqlite database across devices when they are updated?更新时如何跨设备共享和同步android sqlite数据库?
【发布时间】:2015-02-20 17:14:17
【问题描述】:

我是一名新手 android 应用程序开发人员。目前我正在开发一个具有 sqlite 数据库的应用程序。用户将一些数据存储在该数据库中。现在我想在我的应用程序中添加在线同步/数据共享功能 - 如果用户更新他/她设备的数据库(这意味着存储/删除数据)该应用程序的所有其他用户将通过互联网获得更新(我的意思是他们的 sqlite数据库将相应更新)。我该怎么做?

我对此进行了搜索,并找到了有关 Sync Adapter 的信息。但我仍然对同步适配器是否能解决我的问题感到困惑。以及如何跨设备共享 sqlite 数据库。

请给新手一个友好的答案。任何简单的教程/文档将不胜感激。

谢谢!

【问题讨论】:

    标签: android android-sqlite


    【解决方案1】:

    在每个设备上创建数据库 - 特定于存储系统等。

    要“共享数据库”,您需要共享数据。本质上,它是一个导出/导入过程。因此数据将从一台设备导出并导入另一台设备。

    您可以通过以 JSON 或 CSV 格式存储数据来做到这一点。导出创建一个文件(或在内存中完成),然后需要将网络视图(可能是 HTTP)发送到服务器。从那里另一台设备可以下载并将其导入数据库。

    导入过程必须考虑可能的数据冲突(重复等)和可能的不同数据库版本/结构。这会变得非常复杂,非常快。在发布之前尽可能多地开发 - 否则您将遇到各种同步问题。

    SyncAdapter 可以为您简化一些此过程。它也可能无法满足您的需要或期望。以下是更多信息:

    Own sync adapter for Android?

    【讨论】:

      【解决方案2】:

      不幸的是,在服务器和设备之间同步数据的问题没有“简单”的解决方案。正如你所说的那样,SyncAdapter 和ContentProvider 是要走的路。对于新手开发者来说,这些确实很难使用和实现。

      提供了另一种方法:

      1. 每当用户更改其设备上的数据时(即在数据库中创建新条目时),将布尔标志设置为 true。

      2. 检查互联网是否开启。如果是,请使用 Web 服务更新服务器上的此数据。将标志设置为false。

      3.如果互联网不可用,让标志保持true。

      4. 创建一个BroadcastReceiver,只要网络状态发生变化(即互联网打开或关闭),它就会被激活。如果 Internet 可用且标志为 true,则调用 Web 服务以更新服务器上的数据。将标志设置为false。

      5. 同样的BroadcastReceiver还有另一个功能:如果互联网可用,调用另一个Web服务从服务器获取新数据。每次互联网可用时都会发生这种情况。

      【讨论】:

      • 抱歉回复晚了。实际上,当您回答我的问题时,我对网络服务一无所知。所以我很难判断,你的帖子是否回答了我的问题! :) 。由于我对 Web 服务一无所知,因此我尝试了 DropBoxSync 等替代方法,但失败了。最后,我尝试将 sqlite DB 与托管在服务器上的远程 mySQL DB 同步并成功!顺便说一句,您所说的网络服务是什么意思?与我提到的远程数据库同步?
      • @AshfaqurRahman:很抱歉回复晚了……通过网络服务,我的意思是网络调用从您的移动应用程序获取存储在服务器端数据库中的数据的服务器端 URL。很高兴听到您成功:) 但是,我是第一个回答您的问题的人。我认为您将我的答案标记为正确是唯一公平的。谢谢:)
      猜你喜欢
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      相关资源
      最近更新 更多