2011-10-18 8 views
0

私はコード内にデータベースの内容をチェックするメソッドを持っています。以下はコードですCursorIndexOutOfBoundsException on cursor.getString(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) 

答えて

0

あなたのコード内の問題のカップルがあります:

  • あなたは(http://developer.android.com/reference/android/database/Cursor.html#moveToFirstを使用して列にアクセスしようとする前に、最初の行に移動する必要があります)
  • cursor.getCount()は、行の数を返します。 。ただし、ループでは、cursor.getString(i)を使用しています。これは、n番目の列にアクセスするために使用されます。
2

この方法を試して、Cursorから値を取得してください。 あなたは、それはリターンが

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

値Cursorオブジェクトからデータを取得するためのより良い方法がありますように、先頭にカーソル位置を配置する必要があります。

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(); } while(cursor.moveToNext()); }} cursor.close();しかし、私はjava.lang.IllegalStateExceptionを取得しています:行0からフィールドスロットを取得するcol 1がandroid.database.CursorWindow.getString_native(ネイティブメソッド)android.database.CursorWindow.getString(CursorWindow.java:363)で失敗しました – androidnewbie

+0

なぜですかこのカーソルコードをforループの中に入れて、置く必要はありません。 –

+0

columnIndexはハードコードされるべきでないためです。ですから、私のやり方は、カーソルコードをforループの中に入れて、Stringを取得する列を指定することです。別の質問ですが、行番号を指定するにはどうすればよいですか?例外は「行0列1からフィールドスロットを取得する」と言っていますが、これを正しく指定する必要がありますか?私はたくさんの質問があれば申し訳ありません。私はこれで新しいです。ありがとう。 – androidnewbie

関連する問題