Это довольно простой вопрос.Я надеюсь, что ответ «оба», но я боюсь, что ни то, ни другое.Я изучил документы для разработчиков Android для SQLiteDatabase и Cursor , но не могу найти однозначного ответа на этот вопрос.
Случай, который я спрашиваю огде я получаю курсор, вызываю moveToFirst
, затем зацикливаюсь, пока isAfterLast
не вернет true.Было бы очень удобно для шаблона, который я кодирую несколько раз, если бы он просто работал и выполнял цикл 0 раз, если курсор имеет 0 записей.
Или мне нужно явно проверить наличие пустого курсорапервый?
РЕДАКТИРОВАТЬ: Некоторые ответы показывают, что люди не совсем понимают, что я спрашиваю.В принципе, я хотел бы написать это:
cursor = myDb.query(...)
cursor.moveToFirst()
while (!cursor.isAfterLast()) {
processRow(...)
}
Но я не уверен на 100%, что могу.isAfterLast
не может ничего вернуть полезно , но верно для этого случая, но это не значит, что оно действительно возвращает true для пустого запроса.Документы, похоже, не указывают, какое возвращаемое значение у большинства методов курсора, если курсор пуст (документация по Android кажется довольно неопределенной во многих угловых случаях), кроме getCount
.Поэтому я беспокоюсь о том, что мне нужно сделать следующее:
cursor = myDb.query(...)
if (cusror.getCount() > 0) {
cursor.moveToFirst()
while (!cursor.isAfterLast()) {
processRow(...)
}
}
Что является беспорядочным и логически избыточным.Имейте в виду, что в реальной реализации кода больше, и он распространяется на несколько методов.И один из ответов теперь предлагает мне также проверить курсор на null
, что полностью недокументировано ...
Я просто хочу знать, знает ли кто-нибудь еще действительное поведение isAfterLast
при вызове пустого курсора.