【发布时间】:2011-04-15 15:56:02
【问题描述】:
在我的应用程序中,我正在将数据库访问包装到 ContentProvider 中。这是因为有时我会因为两个线程同时访问数据库而崩溃。我严重依赖后台线程从 Web 服务器中提取数据并将其放入数据库;当用户在活动之间切换时,您可能会同时运行多个活动。这就是原因。
现在如何。 我已经实现了 ContentProvider 类,这似乎工作正常。在清单中注册,这也会在 LogCat 中显示提供程序处于活动状态。
应用程序及其所有活动通过包装类访问数据库,该包装类本身不是活动。此类的构造函数将调用活动的上下文作为参数。没什么特别的。
现在我的问题: 通过 context.query() 方法访问内容提供程序时,我遇到了崩溃:
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): Caused by: java.lang.NullPointerException
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): at android.content.ContentResolver.acquireProvider(ContentResolver.java:727)
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): at android.content.ContentResolver.query(ContentResolver.java:239)
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): at squirrel.DeaddropDroid.DeaddropDB.query(DeaddropDB.java:482)
违规行是:
final Cursor blog2 = db.query(DeaddropDB.BLOG_TABLE, new String[] {
DeaddropDB.KEY_ID, DeaddropDB.KEY_DATE,
DeaddropDB.KEY_BLOG_SUMMARY }, null, null,
DeaddropDB.KEY_DATE + " DESC");
db 是一个 DB 对象,构造函数将活动的上下文作为参数。 在同一活动中,以下行按预期工作并给出正确的结果:
final Cursor blog = managedQuery(DeaddropDBProvider.BLOG_URI,
new String[] {DeaddropDB.KEY_ID, DeaddropDB.KEY_DATE,
DeaddropDB.KEY_BLOG_SUMMARY }, null, null,
DeaddropDB.KEY_DATE + " DESC");
这证明我的 ContentProvider 可以正常工作并且已正确注册。我真的不知道这里发生了什么!为什么这个查询不像宣传的那样工作?
【问题讨论】:
-
我找到了答案...只需要等待24小时标记通过...然后可以发布它。
标签: android database sqlite android-contentprovider