【发布时间】:2012-04-22 05:21:01
【问题描述】:
因为有些cmets,简单来说问题:
小部件如何访问自己的 sqlite 数据库?
为什么它不适用于普通的 DatabaseAdapter 类?
是否需要某些权限?
Remotevie/AppWidgetProvider 是否有限制访问自己的数据库(没有 ContentProvider)
这个问题看起来很简单,但如果有人真的想知道我为什么要问,那么细节如下:
我有以下设置:
我有一个普通的 android 应用程序,它在 assets 文件夹中带有相当多的 HTML 页面。由于应用程序的大小,首选安装位置是外部 sd 卡。这很好用。
这意味着应用程序不能包含小部件,因为小部件需要驻留在内部 ROM 中。
相反,小部件将从外部 sd 卡上的应用程序数据库中读取。这是通过 ContentProvider/ContentProviderClient 实现的。
到目前为止一切正常。
现在,该小部件需要在每个实例的基础上维护一些持久的配置设置。因此,AppWidgetProvider 类不能使用首选项,因为它们会在每个类的基础上应用。
因此,为了保留(相当复杂的)特定于实例的配置数据,我希望 AppWidgetProvider 类拥有自己的小型 sqllite 数据库。
现在,虽然我可以通过 contentprovider 从小部件访问应用程序的数据库,但小部件似乎无法访问自己的数据库。我在小部件项目中有一个数据库适配器类;在 AppWidgetProvider 内部,我有 Context,但似乎没有写入。
对数据库适配器的调用正常(我已经完成了一些日志记录),但是当我检查表时,没有发生任何写入。
这是为什么呢?我真的需要小部件内的 ContentProvider 来访问小部件的数据库吗?我不想走那条路,因为当我实现从小部件访问应用程序数据库时,我必须通过 ContentProviderClient 而不是 ContentProvider。那会很麻烦。由于我需要的不仅仅是 CRUD 访问权限,因此显然需要创建一个自定义 ContentProviderClient。 android 文档明确指出“如果使用完全在您自己的应用程序中,您不需要提供程序来使用 SQLite 数据库。”所以恕我直言,这意味着小部件可以直接访问其数据库吗?我需要特殊权限吗?我怀疑,因为小部件在主屏幕进程中作为 RemoteViews 运行,所以对数据库的访问受到某种限制? 对此有何想法、想法、提示?
【问题讨论】:
-
您真的希望人们阅读大量未格式化的文本,充满拼写错误,并花时间回答您吗?
-
对你的问题做点什么,没人会看
-
@Ollie_C,这个问题并不全是错别字:英语对其作者来说是一门外语。我建议您遵循英语的悠久传统,并以同情的态度对待成年后学习英语的人。