【问题标题】:ContentProvider: managedQuery() works; query() failsContentProvider: managedQuery() 有效;查询()失败
【发布时间】: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


【解决方案1】:

最后,正如我所承诺的,我的答案。

是的,所以这毕竟是我的错(当然)。对 Android 的源代码进行了一些挖掘(对开源的另一个赞许),并通过一些进一步的测试,我找到了原因。我的 Uri 为空!我尝试从提供程序导入 uri,但出现问题。 这将是我的下一个问题,因为虽然我有解决方法,但我不明白为什么会出错。

这是我的下一个问题:Load URI from myContentProvider fails (null result),虽然我有一个可行的解决方案,但我不明白为什么会出错。有关该问题的更多详细信息,请参见此处。

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多