2012-06-29 10 views
6

Ich versuche, einen Text aus einer bestimmten Zeile meiner Datenbank zu erhalten. Dazu habe ich diese FunktionCursorIndexOutOfBoundsException Index 0 angefordert, mit einer Größe von 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; 
} 

und ich nenne es wie folgt aus:

enter image description here

ich diesen Fehler:

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

Meine Tabelle sieht wie folgt aus

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) 

Warum erhalte ich diesen Fehler? Was mache ich hier falsch?

Vielen Dank im Voraus.

+0

Bitte akzeptieren Sie die Antwort, wenn Sie Ihre Lösung haben :) –

Antwort

25

Es scheint, als ob Sie einen leeren Cursor haben. Statt zu prüfen, ob es null Versuch ist checkcing

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

versuchen Sie, wo Bedingung zu entfernen, um sicherzustellen, dass Sie tatsächlich Daten erhalten, wenn die Select-Anweisung ausgeführt wird. Wenn Sie immer noch nichts erhalten, haben Sie möglicherweise einen Tippfehler in Ihren Tabellennamen oder konnten die Datenbank/Tabellen nicht verbinden/erstellen.

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

Ich stelle diese Bedingung und ich sehe, dass die Zählung meines Cursors ist 0, aber ich verstehe nicht warum. – Gabrielle

+0

Lesen Khans Antwort, Ihre db. Abfrage nicht die bei http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html beschriebenen Syntax entspricht „true“ aus den Parametern zu entfernen könnte den Trick – KristianMedK

+0

tun änderte ich meine Abfrage als Khan sagte, , aber immer noch das gleiche Problem. – Gabrielle

0

Versuch durch diese Zeile zu ändern

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); 

von

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); 

und dies auch in hinzufügen, wenn Bedingung

return str; 
+0

Ich habe der gleiche Fehler, nichts geändert. – Gabrielle

+0

eine weitere PLZ überprüfen Sie Ihre Spalte Name und Tabellenname sollte gleich sein wie in der Datenbank keine Rechtschreibfehler zu dies kann dazu führen, Problem – Khan

+0

welcher Typ der Spalte KEY_FORM_LABEL_ID ist – Khan

1

Versuchen

01 mit
while(cursor.moveToNext()) 
{ 
    if(cursor.isFirst()) 
    { 
     //Your code goes here in your case 
     return mCursor.getString(mCursor.getColumnIndex(KEY_ITEM_NAME)); 
    } 
} 
finaly 
{ 
if(mCursor!= null) 
{ 
    mCursor.close(); 
} 
} 
Verwandte Themen