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.

  • Programmgesteuertes Google Map Fragment Sichtbarkeit (API2)
  • Android Fragment Griff zurück Taste drücken
  • Unterschiede zwischen ItemizedOverlay und Overlay-Klasse
  • Android TextView: Einstellung der Hintergrundfarbe dynamisch funktioniert nicht
  • OnClickListener auf scrollView
  • Wie finde ich alle hartcodierten Saiten in meinem Projekt in Android Studio
  • GAE muss zuerst einen Satz * BlobStorage () aufrufen
  • Android Spezielle Benachrichtigung
  • Android-Bibliothek-Projekt als JAR-Datei für den Vertrieb, wie Google Analytics
  • Android: So deaktivieren Sie Steuerelemente während der Fortschrittsanzeige ist aktiv
  • Erweitern von Android View-Klasse, um einen dropshadow hinzuzufügen
  • Wie kalibriere ich Android Accelerometer & Reduzieren Lärm, Eliminieren Gravity
  • 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.