Pod jakimi warunkami ContentResolver.query() zwraca null zamiast obiektu kursora? Dostałem już puste kursory, ale dopiero zdałem sobie sprawę, że metoda może również zwrócić wartość zerową. Nie udało mi się jednak wyśledzić okoliczności, w których to się dzieje.Co powoduje, że funkcja ContentResolver.query() Androida zwraca wartość null?
Odpowiedz
Po prostu natknąłem się na ten sam problem z powodu raportu awarii użytkownika, który otrzymałem dzisiaj za moją aplikację. Jeśli dokumentacja na Androida jest niejasna, pomaga spojrzeć na kod źródłowy. To co znalazłem na temat przyczyn dla ContentResolver.query()
powrocie null
:
Dostawca treści nie mogą być nabywane. Może to wynikać z problemu z określonym
Uri
lub po prostu nie istnieje w systemie. Jeśli problemem jest Uri, przyczyną są: protokół nie jestcontent://
lub Uri nie ma części autorytatywnej (Uri.getAuthority() == null).Zakupiony dostawca usług query method sam w sobie zwraca
null
.Można uzyskać dostawcę treści, ale podczas kwerendy został zgłoszony kod RemoteException.
Zwłaszcza z powodu (2.) to całkiem dużo arbitralne, co może być przyczyną null
wskutek ponieważ nie istnieją żadne reguły zdefiniowane. Ale zwykle, jeśli SQLite jest back-endem ContentProvider
, możesz spodziewać się co najmniej jakiegoś pustego obiektu Cursor zamiast tylko null
.
System Android ContentProvider
s wykonają jednak pewne kontrole, zanim zwrócą cokolwiek. Jeśli dane wejściowe nie są zgodne z oczekiwaniami, istnieje prawdopodobieństwo, że zostanie zwrócone null
. Ale szczerze mówiąc, nigdy wcześniej mi się to nie zdarzało. Zwykle otrzymuję numer IllegalArgumentException
w przypadku problemów z parametrami zapytania. Może niektóre implementacje ContentProvider zwracają null
w przypadku pustych zestawów wyników.
Tak czy inaczej. Wydaje się konieczne, aby zawsze sprawdzać pod kątem wartości zerowej. Szczególnie numer przyczyny (3.) jest prawdopodobnie czymś, co może się zdarzyć na dowolnym urządzeniu z systemem Android.
Jeśli nie ma wyniku, zwraca wartość null. Mam na myśli powiedzieć, że jeśli dane zapytanie bazy danych nic nie wyniknie (nawet jeden wiersz danych), to query() zwraca null.
zwraca zero, jeśli schemat URI nie ma postaci content://
lub jeśli contentProvider
dla samego schematu nie istnieje.
ContentResolver.query() zwróci wartość null w następujących przypadkach:
Jeśli próbujesz przekazać nazwy kolumn, które nie istnieje w bazie danych (bardzo częsty przypadek, gdy deweloperzy użyć stałe jako kolumny o nazwach , ponieważ wyglądają podobnie do kolumn).
Prawdopodobnie ma wartość null, ponieważ Twój argument URI jest nieprawidłowy.
Mogą być też inne przypadki, w których zwróci wartość null. Jednak powyższe dwa przypadki są bardzo częstym powodem, dla którego programiści ściągają włosy :)
Jeśli zapomnisz zadeklarować dostawcę w manifeście, twoje zapytania mogą zwrócić wartość null.
Miałem ten sam problem. Mój błąd polegał na tym, aby nie zamykać kursora dla dostawcy, aby późniejsza kwerenda wywoływała wartość null.
To jest ten. Jeśli nie zamkniesz kursora, następujące zapytania mogą lub nie będą działać (i ostatecznie zwrócą identyfikator URI jako wartość null). Usiadłem na tym przez godzinę, a potem zobaczyłem to. +1 – DJO
- 1. Dlaczego funkcja TextToSpeech.getLanguage() * czasami * zwraca wartość null?
- 2. Fragment Androida getArguments() zwraca wartość null
- 3. Dlaczego funkcja getActionView() zwraca wartość null
- 4. Dlaczego funkcja SelectSingleNode zwraca wartość null?
- 5. Funkcja getMap() funkcji SupportMapFragment zwraca wartość null
- 6. Dlaczego funkcja getHandler() zwraca wartość null?
- 7. Sensor.TYPE_ROTATION_VECTOR zwraca wartość null
- 8. mapFragment.getMap() zwraca wartość null
- 9. ConfigurationManager.AppSettings - Zwraca wartość Null
- 10. Biblioteka projektowania Androida 25.1.0 powoduje, że funkcja FloatingActionButton.Behavior przestanie działać
- 11. newSpellCheckerSession zawsze zwraca wartość null
- 12. System.Web.Security.FormsAuthentication.Encrypt zwraca wartość null
- 13. getSystemResourceAsStream() zwraca wartość null
- 14. Plus.PeopleApi.getCurrentPerson zwraca wartość null
- 15. avcodec_find_encoder (AV_CODEC_ID_H264) zwraca wartość null
- 16. getResourceAsStream() zawsze zwraca wartość null
- 17. W Activity.onCreate(), dlaczego funkcja Intent.getExtras() czasami zwraca wartość null?
- 18. Funkcja getActivity() zwraca wartość null po powrocie z okna dialogowegoFragment
- 19. Dlaczego chrome.extension.getBackgroundPage() zwraca wartość null?
- 20. Co powoduje, że maps.googleapis.com/maps/vt zwraca błąd 400?
- 21. ReplyManager getBestProvider zwraca wartość null
- 22. Co zwraca funkcja dojo.query()?
- 23. Intent.getExtras() zawsze zwraca wartość null
- 24. Request.getAttribute ("javax.servlet.request.X509Certificate") Zwraca wartość Null
- 25. getDrawingCache() zawsze zwraca wartość null
- 26. android.support.v4.app.getFragmentManager() zwraca wartość null?
- 27. Dlaczego Activity.getPackageManager() zwraca wartość null
- 28. GROUP_CONCAT zwraca wartość NULL, jeśli wartość jest NULL
- 29. File.list() zwraca wartość null dla katalogu
- 30. GetTemplateChild zawsze zwraca wartość null
Jakże kulawy, że zawsze powinniśmy sprawdzić wartość zerową z powodu czegoś, co zdarza się bardzo rzadko (przypadek 3). – RestInPeace
W moim przypadku link był 'contnet: // XXX' zamiast' content: // XXX', dammm –