2017-01-17 7 views
-1
initialisiert

Ich erhalte diese Fehlermeldung:SQLite Cursor ist falsch

java.lang.IllegalStateException: Es konnte keine Zeile 0, Spalte 28 von CursorWindow lesen. Stellen Sie sicher, dass der Cursor korrekt initialisiert ist, bevor Sie auf Daten zugreifen.

Hier ist mein Cursor aus meiner DB-Handler-Klasse ... gibt es sichtbare Fehler?

// 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; 
} 

Antwort

2

Spaltenindizes sind 0-basiert und nicht 1-basiert. Ihr Cursor hat 28 Spalten und Sie versuchen, den 29. zu lesen.

Verwenden Sie stattdessen getColumnIndex() (oder besser getColumnIndexOrThrow()), um den Spaltenindex nach Spaltennamen zu erhalten, anstatt Ihre Indizes hart zu codieren.

+0

Danke laalto! Ich werde es versuchen. – user7422049

+1

Erwägen Sie stattdessen 'getColumnIndexOrThrow() 'zu verwenden ... –

+0

Danke laalto und -CL. Das scheint zu funktionieren! Ich entschuldige mich für die langsame Antwort. – user7422049

Verwandte Themen