【问题标题】:How to synchronize Android database with web server database? [duplicate]如何将 Android 数据库与 Web 服务器数据库同步? [复制]
【发布时间】:2018-03-20 06:59:04
【问题描述】:

我是 Android 开发新手,我正在创建一个用于练习目的的应用程序,我的应用程序仅从网络服务器检索数据并将其复制到 SQLite 数据库中,但我如何知道是否有我没有的新数据有在我的本地数据库中还是已更新?有没有办法告诉Android“更新这些记录并在没有任何操作的情况下插入这些新记录”?

是否必须创建同步适配器,或者我可以使用 JobScheduler 或 Firebase JobDispatcher 来完成?

【问题讨论】:

  • 您可以切换到内置同步功能的 Realm Sync 或 Couchbase Mobile(如果您不想实际使用 Firebase)。不过 SQLite 也不是。

标签: android sqlite android-jobscheduler firebase-job-dispatcher


【解决方案1】:

我如何知道我的本地数据库中是否有新数据或已更新?

好吧,您的应用程序可以通过两种机制来了解您是否需要从远程服务器获取新数据并保存到本地 sqlite 数据库。 PushPoll

现在,使用哪一个取决于具体情况。

轮询 - 假设用户正在查看项目列表。用户拉动刷新,然后您可以选择调用服务器以检查是否有任何新数据。或者您可以选择不断轮询新数据,这可能不是一个好主意,因为它可能会消耗不必要的资源。

推送 - 当服务器有新数据时,它可以发送带有适当数据的FCM push notification。您可以在应用程序中处理推送通知并使用新数据更新数据库。例如,如果您的本地数据库中只有一个表,则每一行都有唯一的 Id。您可以在 FCM 消息中包含id 和其他相关信息,并更新本地数据库中的相应行。

体面的阅读:Poll vs. Push - Any reasons to avoid Push Notifications?

【讨论】:

    【解决方案2】:

    有两个阶段:

    1. 当有新数据时使用推送通知通知您的应用程序。这将有助于实时同步数据。
    2. 您的数据库和服务器数据库应该有一些标志来检测是否有新记录。例如,你可以使用增量id,如果本地id小于服务器的id,则该检索更新的数据了。这将有助于在用户长时间关闭然后再次使用应用程序时同步数据。

    【讨论】:

    • 如果我更新网络服务器数据库中的记录,我如何能够检测到特定记录已更改并需要在本地数据库中更新?
    • 对于第一阶段,这很容易,只需发送一个推送通知以通知客户端更改记录的 id。对于第二阶段,您可以为所有记录添加一个标志。如果为假,则没有变化。如果是真的,那就有变化。当客户端有更新请求时,此标志将重置为 false。
    【解决方案3】:

    Syncadapter 仅适用于这些操作,它的机制最适合您的场景。

    对于您的查询:

    是否必须创建同步适配器,或者我可以使用 jobScheduler 或 Firebase JobDispatcher 来完成?

    你可以参考这个answer

    【讨论】:

      猜你喜欢
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2011-09-24
      相关资源
      最近更新 更多