如何解决android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0

时间:2017-07-10 16:43:22

标签: java android sqlite cursor

我已经搜索了很长时间的解决方案,仍然无法找到相关的方法来使其正常工作。
我在Android工作室的外部 myDBClass.java 中使用此方法来查找最后插入的行。

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

然后我在 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();  

抛出android.database.CursorIndexOutOfBoundsException。请给我一个解决方案。

2 个答案:

答案 0 :(得分:1)

光标初始化为位置-1,因此当您调用 moveToNext ()时,如果光标到达位置0,则返回true,这意味着db至少获取了一个值。

使用此

 if(cursor.moveToNext()){

     //database fetched at least one value
 }

答案 1 :(得分:0)

您还需要检查光标是否有结果,如下所示:

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