Was verursacht Android's ContentResolver.query (), um null zurückzugeben?

Unter welchen Bedingungen hat ContentResolver.query () null anstelle eines Cursorobjekts zurückgegeben ? Ich habe leere Cursor bekommen, aber ich habe nur erkannt, dass die Methode auch null zurückgeben kann. Ich habe nicht in der Lage gewesen, die Umstände zu verfolgen, dass dies geschieht, obwohl.

  • Was bedeutet Layout_height = "0dp"?
  • Zurück-Taste und letzte Aktivität
  • Android N Java 8 Features (Jack Compiler) und Kotlin Interop
  • Öffnen Sie EditTextPreference durch Code (programmgesteuert)
  • Android-Layout Layout scrollbar, wenn die Soft-Tastatur öffnen, aber nicht verschieben es nach oben
  • So verbinden Sie eine Layoutansicht mit einer Aktivität
  • Unerwarteter Fehler bei der Verarbeitung der hprof-Datei: null
  • Ersetzen Sie Fragment in einem ViewPager
  • Android: wie man überprüft, ob die Anwendung im Hintergrund läuft
  • Android Studio: Debug-Anwendung auf Gerät
  • Sofortige Audio Input & Output Android
  • IOS SegmentedControl gleichwertig in Android
  • 6 Solutions collect form web for “Was verursacht Android's ContentResolver.query (), um null zurückzugeben?”

    Ich stolperte gerade über das gleiche Problem wegen eines User Crash Report Ich erhielt heute für eine App von mir. Wenn die Android-Dokumentation unklar ist, was es hilft, den Quellcode zu betrachten. Dies ist, was ich über die Ursachen für ContentResolver.query() Rückgabe null :

    1. Der Content Provider kann nicht erworben werden. Dies kann auf ein Problem mit dem angegebenen Uri oder weil es einfach nicht auf dem System existiert. Wenn das Uri das Problem ist, sind die Ursachen: Protokoll ist nicht content:// oder das Uri hat keinen Berechtigungsstringabschnitt (Uri.getAuthority () == null).

    2. Die Abfragemethode des erworbenen Anbieters gibt null .

    3. Der Content Provider konnte erworben werden, aber eine RemoteException wurde während einer Abfrage geworfen.

    Vor allem wegen (2.) ist es ziemlich beliebig, was die Ursache für null als Ergebnis sein könnte, da es keine Regeln gibt. Aber in der Regel, wenn SQLite das Back-End eines ContentProvider , können Sie zumindest ein leeres Cursor-Objekt als Ergebnis statt nur null erwarten.

    Android System ContentProvider s tun einige Schecks aber bevor sie etwas zurückgeben. Wenn die Eingabe nicht wie erwartet ist, ist die unwahrscheinliche Chance, dass null kann. Aber um ehrlich zu sein, das ist mir noch nie passiert. Ich bekomme normalerweise eine IllegalArgumentException im Falle von Abfrageparameterproblemen. Vielleicht geben einige ContentProvider-Implementierungen bei leeren Ergebnismengen null .

    In jedem Fall. Es scheint notwendig zu sein, immer auf Null zu überprüfen . Besonders Grund Nummer (3.) ist wahrscheinlich etwas, das auf jedem Android-Gerät passieren kann.

    ContentResolver.query gibt null zurück, wenn das uri-Schema nicht vom Formularinhalt content:// oder wenn der contentProvider für das Schema selbst nicht existiert.

    ContentResolver.query () wird in folgenden Fällen null zurückgeben:

    1. Wenn Sie versuchen, Spaltennamen zu übergeben, die in der Datenbank nicht vorhanden sind (ein sehr häufiger Fall ist, wenn Entwickler Konstanten als Spaltennamen verwenden, weil sie den Spalten ähneln).

    2. Es ist wahrscheinlich null, weil dein URI-Argument ungültig ist.

    Es kann auch andere Fälle geben, in denen es null zurückkehren wird. Allerdings sind die oben genannten zwei Fälle sehr häufige Gründe, warum Entwickler ihre Haare ziehen 🙂

    Ich hatte das gleiche Problem. Mein Bug war, einen Cursor für den Provider nicht zu schließen, so dass ein späterer Abfrageaufruf zu null führt.

    Wenn Sie vergessen, den Anbieter in Manifest zu deklarieren, können Ihre Abfragen null zurückgeben.

    Wenn es kein Ergebnis gibt, gibt es null zurück. Ich meine zu sagen, wenn die gegebene Datenbank-Abfrage nichts (nicht einmal eine einzelne Zeile von Daten) dann Abfrage () gibt null zurück.

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.