Вы пытаетесь прочитать строку из Курсора, когда в Курсоре нет строк (вы, скорее всего, удалили одну строку и, следовательно, в таблице нет строк для извлечения).
Типичная причина этого - когда выполняется бесполезная проверка на нулевое значение курсора, например,
if (cursor != null) {
cursor.moveToFirst();
cursor.getString(0); //<<<<<<<<< FAIL if cursor is empty
}
Это приведет к ошибке выше, если в курсоре нет строк.
Это связано с тем, что курсор, возвращаемый методом SQLiteDatabase (например, query или rawQuery ), никогда не будет нулевым. Действительный курсор будет возвращен.
Метод moveToFirst не дает сбоя, вместо этого он возвращает false, если перемещение не может быть выполнено, если курсор находится в позиции перед первой строкой .
Поэтому, когда вы пытаетесь получить данные из Курсора, возникает исключение, в котором говорится, что нет строк (размер равен 0), чтобы вы могли получить данные из столбца со смещением 0.
Исправление - проверка возврата с moveToFirst. например (вместо вышеуказанного кода)
if (cursor.moveToFirst()) {
cursor.getString(0);
}
- Обратите внимание, что это типичный код, который дает сбой, есть другие способы, но в основном любой из перемещения курсора? методы должны быть проверены на возвращаемое значение. Метод Cursor getCount () также можно использовать для проверки наличия строк в курсоре.