2011-10-18 29 views
0

我在我的代碼中檢查數據庫內容的方法。下面是代碼:cursor.getString上的CursorIndexOutOfBoundsException(i)

if(rowId >= 1){ 

     Cursor cursor = adapter.fetchAllQRurl(); 
     int length = cursor.getCount(); 

     for(int i=0; i<length ; i++){ 
      if(contents.equals(cursor.getString(i))){ 
      Toast.makeText(this, "The entry already exists.",Toast.LENGTH_LONG).show(); 
     } 
    } 

但我總是得到下面的錯誤。我不確定「cursor.getString(i)」 是否出錯了我錯過了我的代碼上的某些內容?

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 5 
    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 
    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 
    at android.database.AbstractWindowedCursor.getShort(AbstractWindowedCursor.java:69) 

回答

2

試試這種方法從光標獲取值。 您需要將光標位置的地方開始,這樣它會返回值

Cursor cursor = adapter.fetchAllQRurl(); 
if (cursor.moveToFirst()) { 
    do { 
     String Test = mNotesCursor.getString("Your_Column_Name"); 
    } while (cursor.moveToNext()); 
} 
1

更好的方式來從遊標對象獲取的數據是:

if (cursor.moveToFirst()){ 
    do{ 
     String data = cursor.getString(i); 
     // do what ever you want here 
    }while(moveToNext()); 
} 
cursor.close(); 
+0

我想這一個:爲(INT i = 0; i <= length; i ++){if(cursor.moveToFirst()){do {String data = cursor.getString(1); Toast.makeText(this,data,Toast.LENGTH_LONG).show(); }而(cursor.moveToNext()); }} cursor.close();但我越來越java.lang.IllegalStateException:從行0獲取字段欄1失敗在android.database.CursorWindow.getString_native(本地方法)在android.database.CursorWindow.getString(CursorWindow.java:363) – androidnewbie

+0

爲什麼你把這個遊標代碼放在for循環中,不需要放置它。 –

+0

因爲columnIndex不應該被硬編碼。所以我的方法是將遊標代碼放在for循環中以指定要獲取String的列。另一個問題,我如何指定行號?例外說「從第0行第1列獲得字段插槽」,我是否正確地理解它,我必須指定它?如果我有很多問題,我很抱歉。我是新來的。謝謝。 – androidnewbie

相關問題