Android 应用程序以异步方式将数据同步到远程服务器

Posted

技术标签:

【中文标题】Android 应用程序以异步方式将数据同步到远程服务器【英文标题】:Android app to sync data to remote server asynchronously 【发布时间】:2014-06-02 22:41:24 【问题描述】:

我正在开发一个 android 应用程序,它将数据本地存储在 Sqlite 数据库中并将其同步到远程服务器(MSSQL 服务器)。通过 REST api 处理数据的发送。

这是我希望它的工作方式和我的处理计划:

当应用程序将数据存储在 Sqlite 数据库中时,应用程序将检查互联网连接是否可用,如果可用,则应用程序将创建一个 HttpPost 来发送数据(我使用 AsyncTask 来处理这个)。发送数据后,我将使用 postExecute 回调将数据库中的行标记为“已同步”。

如果互联网连接不可用,则应用程序将继续运行。

我需要让应用程序在互联网连接可用时监听事件,然后应用程序将遍历所有未同步的行并再次使用 AsyncTask 将数据发送到远程服务器。

我的问题是:

    可以实现吗?如果是,是最佳做法吗? 即使互联网连接可用,如何收听?

谢谢,

【问题讨论】:

是的。您可以检测网络变化,它们是它们的回调。 developer.android.com/reference/android/net/…***.com/a/15756220/2620328 【参考方案1】:

您可以手动实现,但我建议您改用SyncAdapter。

虽然您可以设计自己的系统来进行数据传输 您的应用程序,您应该考虑使用 Android 的同步适配器框架。 该框架有助于管理和自动化数据传输,以及 协调不同应用程序之间的同步操作。当你 使用这个框架,你可以利用几个特性 不适用于您自己设计的数据传输方案。

如果您想在不使用SyncAdapter 的情况下实现此功能,那么对于“检测连接何时可用”,您需要添加BroadcastListener 来监听CONNECTIVITY_ACTION 广播,然后使用ConnectivityManager查询当前状态。

【讨论】:

感谢您的回复。您是说使用 SyncAdapter 会自动处理监听部分(互联网连接的可用性)吗?在存储到 sqlite 数据库的情况下,当 Internet 连接时动态同步的数据如何?我应该使用 AsyncTask 来处理吗?谢谢 @Pelangi 是的。来自文档:自动网络检查——系统仅在设备有网络连接时运行您的数据传输。

以上是关于Android 应用程序以异步方式将数据同步到远程服务器的主要内容,如果未能解决你的问题,请参考以下文章

将 SQLite/Android 数据库表同步到远程 MySQL 数据库表(通过 PHP)

Android - 将 SQLite 与 MySQL 同步的最佳方式 [重复]

了解 dispatch_queues 和同步/异步调度

将 Android 应用数据库与远程 API 同步的策略

将 Android 应用上的 SQLite DB 与远程 MySQL DB 同步

如何使用谷歌联系人api以编程方式将手机联系人同步到android中的gmail