Это ошибка я получаю:CursorIndexOutOfBoundsException при обновлении базы данных
07-20 11:04:45.564: E/AndroidRuntime(1905): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dosemanager1.ui/com.dosemanager.ui.ActivityDisplayMedicineDetails}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
Я хочу, чтобы обновить данные конкретной медицины. Итак, я использую этот код:
public int updateMedicine(MedicineDetails medicine, String oldTitle){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_DOSE_NAME, medicine.getDoseName());
values.put(KEY_DOSE_SCHEDULE, medicine.getDoseSchedule().getTimeInMillis());
values.put(KEY_DOSE_REPEAT, medicine.getDoseRepeat());
values.put(KEY_DOSE_FREQUENCY, medicine.getDoseFrequency());
values.put(KEY_DOSE_OTHER_NOTES, medicine.getOtherNotes());
// updating row
return db.update(TABLE_MEDICINES, values, KEY_DOSE_NAME + " = ?",
new String[] { oldTitle });
}
Теперь он говорит мне, что детали будут обновлены в тосте я сделал в другом месте, но когда я пытаюсь отображением обновленных деталей, я получаю CursorIndexOutOfBounds
исключение.
Это мой код для возврата одного MedicineDetails
объекта:
public MedicineDetails getSingleMedicine(String title) {
SQLiteDatabase db = this.getReadableDatabase();
Calendar cal = Calendar.getInstance();
Cursor cursor = db.query(TABLE_MEDICINES, new String[] { KEY_ID_DOSE, KEY_DOSE_NAME, KEY_DOSE_SCHEDULE,
KEY_DOSE_REPEAT, KEY_DOSE_FREQUENCY, KEY_DOSE_OTHER_NOTES},
KEY_DOSE_NAME + "=?",
new String[] { title }, null, null, null);
if (cursor != null)
cursor.moveToFirst();
cal.setTimeInMillis(cursor.getLong(2));
System.out.println(cal.getTime());
MedicineDetails singleDetail = new MedicineDetails(cursor.getString(1), cal,
cursor.getString(3), cursor.getString(4), cursor.getString(5));
return singleDetail;
}
Здесь я создал таблицу:
String CREATE_MEDICINES_TABLE = "CREATE TABLE " + TABLE_MEDICINES + "("
+ KEY_ID_DOSE + " INTEGER PRIMARY KEY," + KEY_DOSE_NAME + " TEXT,"
+ KEY_DOSE_SCHEDULE + " INTEGER, " + KEY_DOSE_REPEAT + " TEXT,"
+ KEY_DOSE_FREQUENCY + " TEXT," + KEY_DOSE_OTHER_NOTES + " TEXT" + ");";
db.execSQL(CREATE_MEDICINES_TABLE);
тот же код работает отлично, чтобы отобразить детали любого лекарства что я НЕ редактировал. Итак, я думаю, что что-то не так с обновлением.
Я прочитал несколько подобных проблем, но ни один из ответов в другом месте не смог решить мою проблему. Какую ошибку я делаю?
первой очереди таблицы проверки базы данных и данных после обновления. то после попытки получить данные и проверить, что курсор не возвращает нулевое значение. я думаю, что его возвращающие нулевые значения. –