Ответ 1
Я просто наткнулся на ту же проблему из-за сообщения о сбое пользователя, которое я получил сегодня для моего приложения. Если документация на Android неясно о чем-то, она помогает смотреть на исходный код. Вот что я нашел о причинах возврата ContentResolver.query()
null
:
-
Поставщик содержимого не может быть приобретен. Это может быть связано с проблемой с указанным
Uri
или потому, что он просто не существует в системе. Если Uri является проблемой, причины следующие: протокол неcontent://
, или Uri не имеет части строки полномочий (Uri.getAuthority() == null). -
Полученный поставщик метод запроса сам возвращает
null
. -
Поставщик контента мог быть приобретен, но во время запроса было выбрано RemoteException.
Особенно из-за (2.) это довольно произвольно, что может быть причиной для null
в результате, поскольку правил нет. Но обычно, если SQLite является back-end ContentProvider
, вы можете ожидать, по крайней мере, какого-то пустого объекта Cursor вместо результата null
.
Android-система ContentProvider
выполняет некоторые проверки, прежде чем они вернут что-либо. Если вход не соответствует ожидаемому, вероятность того, что null
может быть возвращена, маловероятна. Но, честно говоря, это никогда не случалось со мной раньше. Обычно я получаю IllegalArgumentException
в случае проблем с параметрами запроса. Возможно, некоторые реализации ContentProvider возвращают null
в случае пустых наборов результатов.
В любом случае. Кажется, необходимо, чтобы всегда проверял значение null. Особенно, например, номер причины (3.) - это то, что может случиться на любом устройстве Android.