ContentResolver.query()はどのような条件でカーソルオブジェクトの代わりにnullを返しますか?以前は空のカーソルを取得していましたが、このメソッドがnullを返すこともできることに気付きました。私はこれが起こる状況を辿ることができませんでした。AndroidのContentResolver.query()がnullを返す原因は何ですか?
答えて
私は私のアプリのために今日受け取ったユーザークラッシュレポートのために同じ問題を偶然見つけました。 Androidのドキュメントに何かが不明な場合は、ソースコードを調べるのに役立ちます。
コンテンツプロバイダが取得することができません。これは私が
ContentResolver.query()
がnull
を返すの原因について見つけたものです。これは指定されたUri
の問題が原因である可能性があります。単にシステムに存在しないためです。 Uriが問題の場合は、プロトコルがcontent://
でないか、Uriに権限文字列部分(Uri.getAuthority()== null)がありません。取得したプロバイダのquery method自体が
null
を返します。コンテンツプロバイダーを取得できましたが、クエリ中にRemoteExceptionがスローされました。特に理由は(2)の
それが定義された規則がないので、結果としてnull
の原因が何であるかはかなり任意です。しかし、通常、SQLiteがContentProvider
のバックエンドである場合、null
ではなく、空のCursorオブジェクトが少なくとも一部は結果として期待できます。
AndroidシステムContentProvider
何かを返す前にいくつかのチェックを行います。入力が期待どおりでない場合、null
が返される可能性は低いです。しかし、正直言って、それは以前に私に起こったことはありませんでした。クエリパラメータの問題が発生した場合、通常はIllegalArgumentException
となります。空の結果セットの場合には、ContentProviderの実装によってはnull
が返されることがあります。
いずれにしても。 は常にnullを確認する必要があるようです。特に理由番号(3.)はおそらく、どのAndroid搭載端末でも起こり得るものです。
ContentResolver.query
は、URIスキームの形式がcontent://
ではない場合、またはスキーム自体のcontentProvider
が存在しない場合はnullを返します。
ContentResolver.query()は次の場合にはnullを返します。
あなたがデータベースに存在しないカラム名を渡すしようとした場合(開発者が使用するときに非常に一般的な場合がありますカラムはカラムに似ているので、カラム名は です)。
あなたのURI引数が無効であるため、nullになる可能性があります。
それはnullを返しますする他の例があるかもしれません。しかし、上記の2つのケースは非常に一般的な理由は、開発者が彼らの毛を引っ張る:)
マニフェストでプロバイダを宣言するのを忘れた場合、クエリはnullを返す可能性があります。
私は同じ問題を抱えていました。私の不具合はプロバイダのCursorを閉じないようにしたので、後のクエリ呼び出しがnullにつながった。
これはこれです。カーソルを閉じないと、その後のクエリが機能しない場合があります(結果として、URIがnullとして返されます)。 私はこれを1時間ほど座って、これを見ました。 +1 – DJO
- 1. 何が原因でWriteFileがERROR_ACCESS_DENIEDを返すのですか?
- 2. jQueryが "$(...)is null"となる原因は何ですか?
- 3. パラメータがnullになる原因は何ですか?
- 4. unlinkが 'Resource Temporarily Unavailable'を返す原因は何ですか?
- 5. SignInManager.SendTwoFactorCodeAsyncがfalseを返す原因は何ですか?
- 6. PHP:FILTER_UNSAFE_RAWがFALSEを返す原因は何ですか?
- 7. session_regenerate_id(true)がfalseを返す原因は何ですか?
- 8. このコードでNullリファレンス例外の原因は何ですか?
- 9. 原因は何ですか
- 10. AndroidでMotionEvent.ACTION_CANCELが発生する原因は何ですか?
- 11. これは何が原因ですか?
- 12. drawRectのクラッシュ - 何が原因ですか?
- 13. このAndroidスタジオのエラーの原因は何ですか?
- 14. NPEの原因は何ですか?
- 15. HttpHostConnectExceptionの原因は何ですか?
- 16. java.lang.ClassNotFoundExceptionの原因は何ですか?com.vaadin.sass.internal.ScssStylesheet?
- 17. 改行の原因は何ですか?
- 18. 2フェーズコミットの原因は何ですか?
- 19. シャドーアクネの原因は何ですか?
- 20. 403 rateLimitExceededの原因は何ですか?
- 21. CRVAP0237Eエラーの原因は何ですか?
- 22. デッドロックの原因は何ですか?
- 23. JVMTI_ERROR_NULL_POINTERの原因は何ですか?
- 24. 「System.IO.IsolatedStorage.IsolatedStorageException」の原因は何ですか?
- 25. EventMachine :: ConnectionNotBoundの原因は何ですか?
- 26. NSInvalidArgumentExceptionの原因は何ですか?
- 27. 元の 'OAuth2'状態パラメータがorg.springframework.social.connect.web.ConnectSupportのnullになる原因は何ですか?
- 28. TelephonyManagerはIMEI番号のためにnullを返します:これは何が原因でしょうか?
- 29. Keyboard.FocusedElementがnullの場合、考えられる原因は何ですか?
- 30. RustのTcpSocket :: write()が "invalid input"を返す原因は何ですか?
非常にまれに起こると思われるもの(ケース3)のために、私たちは常にヌルをチェックする必要があります。 – RestInPeace
私の場合、リンクは 'content:// XXX'の代わりに' contnet:// XXX'でしたが、dammit –