2017-01-17 2 views
-1

Я получаю эту ошибку:SQLite Cursor неправильно инициализируется

java.lang.IllegalStateException: Не удалось прочитать строку 0, столбец 28 из CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно.

Вот мой курсор из моего класса обработчика DB ... есть ли видимые ошибки?

// retrieve a single friend 
public Friend getFriend(int id){ 
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase(); 

Friend friend = null; 

if(checkIsDataAlreadyInDBorNot(TABLE_FRIENDS, KEY_ID, id)) 
{ 
    Cursor cursor = sqLiteDatabase.query(TABLE_FRIENDS, new String[] { 
      KEY_ID, KEY_GEN, KEY_FIRSTNAME, KEY_MIDDLENAME, 
      KEY_LASTNAME, KEY_BD, KEY_BM, KEY_BY, KEY_RN, KEY_HC, 
      KEY_HT, KEY_NB, KEY_NS, KEY_SP, KEY_RS, KEY_CH, KEY_P, 
      KEY_FC, KEY_FMU, KEY_LFM, KEY_FMO, KEY_LFMG, KEY_FTS, 
      KEY_FAF, KEY_LFFS, KEY_HO, KEY_OC, KEY_PP}, KEY_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 

    if (cursor != null) 
    { 
     cursor.moveToFirst(); 
    } 



    friend = new Friend(cursor.getInt(0), 
      cursor.getString(1), 
      cursor.getString(2), 
      cursor.getString(3), 
      cursor.getString(4), 
      cursor.getInt(5), 
      cursor.getInt(6), 
      cursor.getInt(7), 
      cursor.getInt(8), 
      cursor.getString(9), 
      cursor.getString(10), 
      cursor.getString(11), 
      cursor.getInt(12), 
      cursor.getInt(13), 
      cursor.getString(14), 
      cursor.getString(15), 
      cursor.getInt(16), 
      cursor.getInt(17), 
      cursor.getString(18), 
      cursor.getString(19), 
      cursor.getString(20), 
      cursor.getString(21), 
      cursor.getString(22), 
      cursor.getString(23), 
      cursor.getString(24), 
      cursor.getString(25), 
      cursor.getString(26), 
      cursor.getString(27), 
      cursor.getString(28)); 
} 

return friend; 
} 

ответ

2

Индексы столбцов основаны на 0, а не 1. Ваш курсор имеет 28 столбцов, и вы пытаетесь прочитать 29-й.

Используйте вместо этого getColumnIndex() (или еще лучше, getColumnIndexOrThrow()), чтобы получить индекс столбца по имени столбца вместо hardcoding ваших индексов.

+0

спасибо laalto! Я попробую это. – user7422049

+1

Рассмотрите возможность использования 'getColumnIndexOrThrow()' ... –

+0

Спасибо laalto и -CL. Кажется, это сработало! Прошу прощения за медленный ответ. – user7422049