2012-06-29 10 views
6

Sto cercando di ottenere un testo da una determinata riga del mio database. Per questo, ho fatto questa funzioneCursorIndexOutOfBoundsException Index 0 richiesto, con una dimensione di 0

public String getTranslation(long rowId) throws SQLException {  
    String str = null; 
    Cursor mCursor = db.query(
     true, TABLE_LANGUAGE_FR, new String[] { 
      KEY_ID_INTERFACE_TEXT, KEY_ITEM_NAME,KEY_FORM_LABEL_ID, KEY_FORM_RANK 
     }, 
     KEY_FORM_LABEL_ID + "=" + rowId, null, null, null, null, null 
    ); 

    if (mCursor != null) { 
     mCursor.moveToFirst(); 
     str = mCursor.getString(mCursor.getColumnIndex(KEY_ITEM_NAME)); 
    } 
    return str; 
} 

ed io lo chiamo così:

db = new DbAdapter(this); 
db.createDatabase(); 
db.openDataBase(); 
String str = db.getTranslation(1706); 

Il mio tavolo si presenta così:

enter image description here

ottengo questo errore:

09:32:08.965 307 com.Orange ERROR AndroidRuntime Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 
09:32:08.965 307 com.Orange ERROR AndroidRuntime  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
09:32:08.965 307 com.Orange ERROR AndroidRuntime  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 
09:32:08.965 307 com.Orange ERROR AndroidRuntime  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 
09:32:08.965 307 com.Orange ERROR AndroidRuntime  at com.Orange.Database.DbAdapter.getTranslation(DbAdapter.java:141) 
09:32:08.965 307 com.Orange ERROR AndroidRuntime  at com.Orange.Authentication.onCreate(Authentication.java:32) 

Perché ricevo questo errore? Cosa sto facendo di sbagliato qui?

Grazie in anticipo.

+0

Gentilmente accetta la risposta se hai la soluzione :) –

risposta

25

Sembra che tu abbia un cursore emtpy. Invece di verificare se si tratta di provare nulla checkcing

if(mCursor.getCount() > 0) 
{ 
    //do stuff 
} 

provare a rimuovere la sua condizione in cui per assicurarsi che effettivamente ottenere i dati quando si esegue l'istruzione SELECT. Se non si ottiene ancora nulla si potrebbe avere un errore di battitura nel nome della scheda, o non è riuscito a connettersi/creare il database/tabelle.

Cursor mCursor = db.query("sys_interface_text", new String[] { 
     "id_interface_text", "item_name","form_label_id", "form_rank"}, 
       "form_label_id = 1706", null, null, null, 
     null); 
+0

Ho inserito questa condizione e vedo che il conteggio del mio cursore è 0, ma non capisco perché. – Gabrielle

+0

Leggi la risposta di Khan, il tuo db. la query non corrisponde alla sintassi descritta su http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html rimuovere "true" dai parametri potrebbe fare il trucco – KristianMedK

+0

Ho cambiato la mia query come ha detto Khan , ma ancora lo stesso problema. – Gabrielle

0

prova cambiando questa linea

Cursor mCursor = db.query(true, TABLE_LANGUAGE_FR, new String[] { 
      KEY_ID_INTERFACE_TEXT, KEY_ITEM_NAME,KEY_FORM_LABEL_ID, KEY_FORM_RANK}, 
        KEY_FORM_LABEL_ID + "=" + rowId, null, null, null, 
      null, null); 

da

Cursor mCursor = db.query(TABLE_LANGUAGE_FR, new String[] { 
      KEY_ID_INTERFACE_TEXT, KEY_ITEM_NAME,KEY_FORM_LABEL_ID, KEY_FORM_RANK}, 
        KEY_FORM_LABEL_ID + "=" + rowId, null, null, null, 
      null); 

e anche aggiungere questo se la condizione

return str; 
+0

ho lo stesso errore, nulla è cambiato. – Gabrielle

+0

un altro controllo verificare che il nome della colonna e il nome della tabella siano uguali a quelli del database che non presentano errori di ortografia, questo potrebbe causare il problema – Khan

+0

quale tipo di colonna KEY_FORM_LABEL_ID è – Khan

1

Provare a utilizzare

Problemi correlati