是什么导致Android的ContentResolver.query()返回null?

Sal*_*lis 60 android

在什么条件下ContentResolver.query()返回null而不是游标对象?我之前已经有了空游标但只是意识到该方法也可以返回null.但是,我无法追踪发生这种情况的情况.

tig*_*chi 69

由于我今天收到的用于我的应用程序的用户崩溃报告,我只是偶然发现了同样的问题.如果Android文档不清楚它有助于查看源代码.这是我发现的ContentResolver.query()返回原因null:

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

  2. 获取的提供者的查询方法本身返回null.

  3. 可以获取内容提供程序,但在查询期间抛出了RemoteException.

特别是因为(2)null因为没有定义规则,因此可能导致结果的原因非常随意.但通常情况下,如果SQLite是一个后端,ContentProvider你可以期待至少一些空的Cursor对象而不仅仅是null.

Android系统ContentProvider在返回任何内容之前会做一些检查.如果输入不符合预期,则null可能返回的可能性不大.但说实话,以前从未发生过这件事.我通常会遇到IllegalArgumentException查询参数问题.也许一些ContentProvider实现null在空结果集的情况下返回.

无论哪种方式.似乎有必要始终检查null.特别是原因数字(3.)可能会在任何Android设备上发生.

  • 在我的例子中,链接是 `contnet://XXX` 而不是 `content://XXX`,该死 (2认同)

nan*_*esh 8

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