2015-08-10 1 views
-2

J'essaie d'obtenir des données de ma base de données, afin de modifier une valeur EditText, mais je ne sais pas pourquoi j'obtiens une exception CursorIndexOutOfBounds.Erreur CursorIndexOutOfBoundsException lors de la tentative d'exécution

mon code de base de données est comme suit

public String getActivityData(Integer name){ 
    SQLiteDatabase db = helper.getWritableDatabase(); 
    String sql = "SELECT * FROM VenueTable WHERE _id = " + name+";"; 
    Cursor a = db.rawQuery(sql, null); 

    String facility = a.getString(a.getColumnIndex("facilities")); 
    return facility; 
} 

est sous le code où j'utilise utiliser les données fournies

facility1 = listViewd.getActivityData(post); 

facility = (TextView) findViewById(R.id.facilityName); 
facility.setText(facility1); 

Je ne sais pas pourquoi je reçois cette erreur, je l'espère quelqu'un peut signaler mon erreur.

Répondre

2

Vous devez vérifier que le curseur est vide ou non. Je fais toujours:

if (cursor.moveToFirst()) { 

     do { 

     // your code. Adding to ArrayList etc. 

     } while (cursor.moveToNext()); 

    } 
1

Vous devez déplacer le curseur sur le premier enregistrement:

a.moveToFirst(); 

peu après le remplissage (après l'exécution du rawQuery()).
Sinon, il est positionné avant le premier enregistrement.

Ce qui signifie, à la position -1, pas à la position .

+0

Le curseur ne peut jamais être nul. Il a été créé avec CursorFactory. Si nous n'avons aucune donnée - SQL retourne le curseur sans aucune donnée. Preuve: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/android/database/sqlite/SQLiteDatabase.java#1252 –