java - 从广播接收器以及应用程序访问数据库

标签 java android android-contentprovider

我构建了一个简单的应用程序,它接受用户输入的数据并将其保存到本地 sqlite 数据库。如果 wifi 连接可用,它会将数据传输到远程服务器上托管的 REST 服务。

我已经完成了上面的部分,并且工作得很好。如果 WIFI 不可用,它将继续前进并期待来自用户的新数据。

当 wifi 可用时,我注册了一个广播接收器,它将访问我的数据库并获取存储的值并将它们发送到远程服务器。

我想知道,当广播接收器尝试查询我的数据库时,如果用户同时输入数据并且数据保存在同一个数据库中,是否会引发 SQLException。

我记得,一次只有一个服务可以访问 SQL 实例。如果它会带来问题,我该怎么做才能克服它。我研究过 ContentProviders,这就是解决方案吗?

我对 Android 还很陌生。请指教。

最佳答案

您可能想看看这个。

What are the best practices for SQLite on Android?

对我来说,我建议当您需要数据库时,总是与 DatabaseHelper 一起创建 ContentProvider,无论您是否需要向外部应用程序提供数据。这实际上并不难做到,我用来构建ContentProvider的最佳引用是DeskClock ,Android 的官方应用程序。

编辑: 作为旁注,您应该考虑创建一个由您的广播接收器调用的 IntentService 来完成工作,因为广播接收器不应该用于长时间运行的任务,例如将内容发送到服务器。

BroadcastReceiver#onReceive

When it runs on the main thread you should never perform long-running operations in it (there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed).

关于java - 从广播接收器以及应用程序访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643159/

相关文章:

Android:如何找出内容解析器的客户端

java - 在枚举创建中使用非类 new 语句?

具有自己的 L&F 的 Java Swing 有时会突然切换回默认 L&F

android - 如何将 Activity 显示为对话框而不是新屏幕?

java - MainActivity 中的 setListAdapter

android - 在 fragment 中加载 ListView 时的新线程

android - 禁用 ContentProvider URI 上的通知

java - Hibernate 3 不自动创建表

java - 泛型:如何处理类层次结构中的多个有界类型

android - 如何确定内容提供者是否包含数据?