在什么条件下,Query()返回 null 而不是游标对象?我以前得到过空游标,但是刚刚意识到这个方法也可以返回 null。不过我还是无法追踪到这件事发生的具体情况。
如果没有结果,则返回 null。我的意思是说,如果给定的数据库查询没有结果(甚至没有一行数据) ,那么 query ()返回 null。
如果 uri 方案不是形式为 content://,或者方案本身的 contentProvider不存在,则 ContentResolver.query返回 null。
content://
contentProvider
ContentResolver.query
Query ()在以下情况下将返回 null: 如果您尝试传递数据库中不存在的列名称(一个非常常见的情况是,开发人员使用常量作为列 名称,因为它们看起来类似于列) 因为 URI 参数无效,所以它很可能为空。
Query ()在以下情况下将返回 null:
如果您尝试传递数据库中不存在的列名称(一个非常常见的情况是,开发人员使用常量作为列 名称,因为它们看起来类似于列)
因为 URI 参数无效,所以它很可能为空。
在其他情况下,它可能返回 null。然而,以上两种情况都是开发人员为什么要费尽心思的常见原因:)
由于今天收到的一个应用程序的用户崩溃报告,我也遇到了同样的问题。如果 Android 文档中的某些内容不清楚,它有助于查看源代码。这是我发现的 ContentResolver.query()返回 null的原因:
ContentResolver.query()
null
无法获取内容提供程序。这可能是由于指定的 Uri出现了问题,也可能是因为它根本不存在于系统中。如果 Uri 是问题所在,原因是: protocol 不是 content://,或者 Uri 没有权限字符串部分(Uri.getAuthority () = = null)。
Uri
获取的提供程序的 查询方法本身返回 null。
可以获取内容提供程序,但是在查询过程中抛出了 RemoteException。
特别是因为(2。)因为没有定义任何规则,所以导致 null的原因是非常随意的。但是通常情况下,如果 SQLite 是 ContentProvider的后端,那么您可以期望至少有一些空的 Cursor 对象,而不仅仅是 null。
ContentProvider
不过,Android 系统 ContentProvider在返回任何内容之前会进行一些检查。如果输入不像预期的那样,就不太可能返回 null。但说实话,我以前从没遇到过这种事。在查询参数出现问题的情况下,我通常会得到一个 IllegalArgumentException。也许某些 ContentProvider 实现在结果集为空的情况下返回 null。
IllegalArgumentException
不管怎样。这似乎是必要的 总是检查 null。特别是第三个理由可能在任何 Android 设备上都会发生。
如果忘记在清单中声明提供程序,则查询可能返回 null。
我也有同样的问题。我的 bug 是没有关闭提供程序的游标,因此稍后的查询调用将导致 null。