是什么导致Android';s ContentResolver.query()是否返回null?
在什么条件下()返回null而不是游标对象?我以前得到过空游标,但刚刚意识到该方法也可以返回null。但是,我无法跟踪发生这种情况的情况。如果没有结果,它将返回null。我的意思是,如果给定的数据库查询没有结果(甚至没有一行数据),那么query()返回null是什么导致Android';s ContentResolver.query()是否返回null?,android,Android,在什么条件下()返回null而不是游标对象?我以前得到过空游标,但刚刚意识到该方法也可以返回null。但是,我无法跟踪发生这种情况的情况。如果没有结果,它将返回null。我的意思是,如果给定的数据库查询没有结果(甚至没有一行数据),那么query()返回null ContentResolver.query如果uri方案的格式不是content://,或者方案本身的contentProvider不存在,则返回null 在以下情况下,ContentResolver.query()将返回null: 如
ContentResolver.query
如果uri方案的格式不是content://
,或者方案本身的contentProvider
不存在,则返回null
在以下情况下,ContentResolver.query()将返回null:
在其他情况下,它可能会返回null。然而,以上两种情况是开发人员发火的常见原因:)我今天收到一份针对我的一个应用程序的用户崩溃报告,因此偶然发现了同样的问题。如果Android文档对某些内容不清楚,那么查看源代码会有所帮助。这就是我发现的
ContentResolver.query()
返回null
的原因:
Uri
存在问题,或者是因为系统上根本不存在该Uri。如果Uri是问题所在,则原因是:协议不是内容://
,或者Uri没有权限字符串部分(Uri.getAuthority()==null)null
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?