是什么导致Android';s ContentResolver.query()是否返回null?

是什么导致Android';s ContentResolver.query()是否返回null?,android,Android,在什么条件下()返回null而不是游标对象?我以前得到过空游标,但刚刚意识到该方法也可以返回null。但是,我无法跟踪发生这种情况的情况。如果没有结果,它将返回null。我的意思是,如果给定的数据库查询没有结果(甚至没有一行数据),那么query()返回null ContentResolver.query如果uri方案的格式不是content://,或者方案本身的contentProvider不存在,则返回null 在以下情况下,ContentResolver.query()将返回null: 如

在什么条件下()返回null而不是游标对象?我以前得到过空游标,但刚刚意识到该方法也可以返回null。但是,我无法跟踪发生这种情况的情况。

如果没有结果,它将返回null。我的意思是,如果给定的数据库查询没有结果(甚至没有一行数据),那么query()返回null

ContentResolver.query
如果uri方案的格式不是
content://
,或者方案本身的
contentProvider
不存在,则返回null

在以下情况下,ContentResolver.query()将返回null:

  • 如果您试图传递数据库中不存在的列名(一种非常常见的情况是开发人员使用常量作为列) 名称,因为它们看起来类似于列)

  • 它可能为null,因为您的URI参数无效


  • 在其他情况下,它可能会返回null。然而,以上两种情况是开发人员发火的常见原因:)

    我今天收到一份针对我的一个应用程序的用户崩溃报告,因此偶然发现了同样的问题。如果Android文档对某些内容不清楚,那么查看源代码会有所帮助。这就是我发现的
    ContentResolver.query()
    返回
    null
    的原因:

  • 无法获取内容提供程序。这可能是由于指定的
    Uri
    存在问题,或者是因为系统上根本不存在该Uri。如果Uri是问题所在,则原因是:协议不是
    内容://
    ,或者Uri没有权限字符串部分(Uri.getAuthority()==null)

  • 获取的提供者本身返回
    null

  • 无法获取内容提供程序,但在查询过程中抛出了

  • 特别是因为(2.)由于没有定义规则,因此导致
    null
    的原因几乎是任意的。但是通常,如果SQLite是
    ContentProvider
    的后端,那么至少可以得到一些空的游标对象,而不仅仅是
    null

    安卓系统
    ContentProvider
    s在返回任何内容之前会进行一些检查。如果输入不符合预期,则不太可能返回
    null
    。但老实说,我以前从未遇到过这种情况。如果查询参数出现问题,我通常会得到一个
    IllegalArgumentException
    。如果结果集为空,某些ContentProvider实现可能会返回
    null


    不管怎样。似乎有必要始终检查空值。特别是原因号(3.)可能会发生在任何Android设备上。

    如果您忘记在清单中声明提供者,您的查询可能会返回null。

    我也有同样的问题。我的错误是没有关闭提供程序的游标,因此稍后的查询调用将导致null。

    我以为我以前得到了空游标对象,但我可能弄错了……您在任何半官方的地方看到过这样的内容吗?没有。我以前总是有测试数据。如果没有结果,它不会返回“null”。它返回的只是一个空游标。由于似乎很少发生的事情(案例3),我们应该始终检查null,这真是太糟糕了。在我的例子中,链接是
    contnet://XXX
    而不是
    content://XXX
    ,dammit@tiguchi你能帮我解答一下我的最新问题吗?这就是问题所在。如果不关闭游标,接下来的查询可能会工作,也可能不会工作(最终将以null返回URI)。我在上面坐了一个小时左右,然后看到了这个+1以下查询如何返回null?