Написал метод для получения записи по указанному id:
public NotesData getInboxItemByID(String id){
db = dbHelper.getReadableDatabase();
cursor = db.query(DataBaseContract.NotesData.TABLE_NAME, new String[] {DataBaseContract.NotesData._ID},
DataBaseContract.NotesData._ID + "=?", new String[] {id}, null, null, null);
int idColInd = cursor.getColumnIndex(DataBaseContract.NotesData._ID);
int dateAndTimeColInd = cursor.getColumnIndex(DataBaseContract.NotesData.COLUMN_DATETIME);
int titleColInd = cursor.getColumnIndex(DataBaseContract.NotesData.COLUMN_TITLE);
int noteTextColInd = cursor.getColumnIndex(DataBaseContract.NotesData.COLUMN_NOTE);
NotesData notesData = new NotesData(cursor.getString(idColInd),
cursor.getLong(dateAndTimeColInd), cursor.getString(titleColInd), cursor.getString(noteTextColInd));
dbHelper.close();
db.close();
return notesData;
}
Приложение падает с такой ошибкой:
android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
Во-первых, мне не понятно, как такая ошибка возникла: ведь напрямую -1
я не запрашивал. Вероятно, следовало поместить курсор в начало перед выполнением запроса, но он не инициализирован перед запросом.
При получении выборки курсор не спозиционирован ни на какую запись в этой выборке и указатель курсора находится перед первой позицией, поэтому возвращает текущий индекс (позицию указателя в курсоре) = -1. Перед получением данных из курсора нужно установить позицию из которой брать данные (определенная запись) - moveToPosition()
или на начало - moveToFirst()
. Для итерации по курсору с несколькими записями использовать метод moveToNext()
- каждый новый вызов метода перемесит указатель курсора на следующюю запись в выборке
cursor = db.query(DataBaseContract.NotesData.TABLE_NAME, new String[] {DataBaseContract.NotesData._ID},
DataBaseContract.NotesData._ID + "=?", new String[] {id}, null, null, null);
cursor.moveToFirst();
int idColInd = cursor.getColumnIndex(DataBaseContract.NotesData._ID);
...
перемещать указатель нужно после выполнения запроса, перед запросом курсор не содержит данных и перемещать в нем указатель некуда в принципе.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть класс, в конструкторе которого вызывается другой класс, в котором в свою очередь есть публичный геттер, возвращающий значение поля
Есть метод myMethod(); надо его запускать через определенное время допустим 45-60 секунд ,пытался сделать через
Хочу написать свои аннотации, так как возникло несколько идей, но не могу понять как это сделатьВроде легко, но вопрос: как к аннотации прикрепить...