我因为收到一个用户崩溃报告而遇到了同样的问题,该应用程序是我的一个应用。如果Android文档中有不清楚的地方,可以查看源代码。以下是我发现的关于ContentResolver.query()
返回null
的原因:
无法获取内容提供者。这可能是由于指定的Uri
存在问题或在系统上根本不存在。如果Uri出现问题,则原因可能是:协议不是content://
或Uri没有权限字符串部分(Uri.getAuthority()==null)。
获取的提供程序的查询方法本身返回null
。
虽然进行了查询,但是出现了RemoteException异常。
特别是由于(2.),null
作为结果可能有很多任意的原因,因为没有定义规则。但通常,如果SQLite是ContentProvider
的后端,您至少可以期望得到一些空的游标对象作为结果,而不是只有null
。
Android系统的ContentProvider
在返回任何内容之前都要进行一些检查。如果输入与预期不同,则可能会返回null
的几率很小。但说实话,在查询参数问题的情况下,这从未发生过在我的程序中。也许某些ContentProvider实现在结果集为空时返回null
。
ContentResolver.query
如果uri的格式不是 content://
或相应的 contentProvider
不存在,将返回 null。
ContentResolver.query() 在以下情况下将返回 null:
如果您尝试传递数据库中不存在的列名(这是一个非常常见的情况,因为开发人员使用常量作为列名,因为它们看起来类似于列)。
由于 URI 参数无效,很可能为空。
可能有其他情况会返回 null。然而,以上两种情况是开发人员头疼的常见原因 :)
如果您在清单文件中忘记声明提供程序,您的查询可能会返回 null。
如果没有结果,它会返回 null。我的意思是说,如果给定的数据库查询没有返回任何结果(甚至没有一行数据),那么 query() 将返回 null。
contnet://XXX
而不是content://XXX
,该死的。 - Mickey TinSCHEME_CONTENT
XD。 - Sourav Kannantha B