2017-07-10 2 views
0

私は長い間ソリューションを検索しましたが、それを動作させる関連する方法を見つけることができません。
私はこのメソッドを外部のmyDBClass.javaのAndroidスタジオで最後に挿入した行を見つけます。 android.database.CursorIndexOutOfBoundsExceptionを解決する方法:サイズ0のインデックス0が要求されました

public Cursor lastrow() { 
    // TODO Auto-generated method stub 
    try{ 
     SQLiteDatabase db; 
     db = this.getReadableDatabase(); // Read Data 
     String query = "SELECT ID As _id, Spinpos, Details, Setfor from alarm order by ID DESC limit 1"; 
     Cursor cursor = db.rawQuery(query, null); 
     if(cursor != null) 
      { 
       cursor.moveToFirst(); 
       return cursor; 
      } 
      else 
      { 
       return null; 
      } 

     } catch (Exception e) { 
      return null; 
     } 
     } 

は、その後、私はそれはandroid.database.CursorIndexOutOfBoundsExceptionをスローMainActivity.java

myDBClass myDb = new myDBClass(this);  
Cursor cursor = myDb.lastrow(); 
String SongID = cursor.getString(cursor.getColumnIndex("Spinpos")); 
Toast.makeText(this,SongID,Toast.LENGTH_LONG).show(); 

でそれを実行します。私に解決策を教えてください。

+0

?あなたはラストローメソッドを示しています。 – danny117

答えて

1

カーソルをので、あなたが呼び出すときmoveToNext()がtrueを返します。カーソルが位置0に到達すると、dbは少なくとも1つの値をフェッチしたことを意味します。

使用のでlastcur方法を示すについてはお答えすることができますどのようにこの

if(cursor.moveToNext()){ 

    //database fetched at least one value 
} 
+0

ありがとうございました。チャーム。 – babiro

+1

この答えを解決策としてマークすることができます –

0

はまた、あなたのカーソルが、このような何かの結果を持っていることを確認する必要があります:-1を配置するために初期化され

if (cursor != null && cursor.getCount() > 0)

+0

こんにちは@Panczur、私はクエリがnullを返すとは思わない。カーソルを返すか、例外をスローします。 if(moveToFirst()){}またはif(moveToNext()){}を呼び出すと、カーソルが空でない場合はtrueを返します。 [link](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#query%28java.lang.String,%20java.lang.String%5B%5D,%20java.lang %20java.lang.String%20java.lang.String%20java.lang.String%20java.lang.String%29) – babiro

関連する問題