72

ContentResolver.query () がカーソル オブジェクトではなく null を返すのはどのような状況ですか? 以前に空のカーソルを取得したことがありますが、メソッドが null を返すこともあることに気付きました。ただし、これが発生する状況を追跡することはできませんでした。

4

6 に答える 6

72

今日受け取ったアプリのユーザー クラッシュ レポートが原因で、同じ問題に遭遇しました。Android のドキュメントで不明な点がある場合は、ソース コードを確認すると役立ちます。ContentResolver.query()これは、返品の原因について私が見つけたものですnull

  1. コンテンツ プロバイダを取得できません。これは、指定された に問題があるUriか、単にシステムに存在しないことが原因である可能性があります。Uri に問題がある場合、原因は次のとおりです。プロトコルがないcontent://か、Uri に権限文字列部分がありません (Uri.getAuthority() == null)。

  2. 取得したプロバイダーのクエリ メソッド自体が を返しますnull

  3. コンテンツ プロバイダーを取得できましたが、クエリ中にRemoteExceptionがスローされました。

null特に (2.) のために、ルールが定義されていないため、結果として何が原因になるかはかなり恣意的です。しかし、通常、SQLite が のバックエンドであるContentProvider場合、結果として だけではなく、少なくともいくつかの空の Cursor オブジェクトが期待できますnull

Android システムContentProviderは、何かを返す前にいくつかのチェックを行います。入力が期待どおりでない場合、null返される可能性はほとんどありません。しかし、正直なところ、それは以前の私には起こりませんでした。通常IllegalArgumentException、クエリ パラメータの問題が発生した場合に発生します。null空の結果セットの場合、一部の ContentProvider 実装が返される可能性があります。

どちらにしても。null を常にチェックする必要があるようです。特に理由番号 (3.) は、おそらくどの Android デバイスでも発生する可能性があります。

于 2013-04-19T15:43:16.200 に答える
10

ContentResolver.querycontent://URI スキームが形式でない場合、またはcontentProviderスキーム自体の が存在しない場合は、null を返します。

于 2012-10-26T05:14:33.007 に答える
2

ContentResolver.query() は、次の場合に null を返します。

  1. データベースに存在しない列名を渡そうとした場合 (非常に一般的なケースは、列に似ているため、開発者が定数を列名として使用する場合です)。

  2. URI 引数が無効なため、null になる可能性があります。

null を返す場合は他にもあるかもしれません。ただし、上記の2つのケースは、開発者が髪を引っ張る非常に一般的な理由です:)

于 2012-10-26T05:15:11.917 に答える
-4

結果がない場合は、nullを返します。つまり、指定されたデータベースクエリの結果が何も起こらない場合(データの1行も)、query()はnullを返します。

于 2012-10-26T04:29:22.123 に答える