如何解决 android.database.CursorIndexOutOfBoundsException:请求索引 0,大小为 0
How to resolve android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
我已经搜索了很长时间的解决方案,但仍然找不到相关的方法来实现它。
我在 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。请给我一个解决方案。
您还需要检查您的光标是否有结果,如下所示:
if (cursor != null && cursor.getCount() > 0)
Cursor 初始化为位置 -1,因此当您调用 moveToNext() 时,如果光标 return 为真到达位置 0,这意味着数据库至少获取了一个值。
使用这个
if(cursor.moveToNext()){
//database fetched at least one value
}
我已经搜索了很长时间的解决方案,但仍然找不到相关的方法来实现它。
我在 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。请给我一个解决方案。
您还需要检查您的光标是否有结果,如下所示:
if (cursor != null && cursor.getCount() > 0)
Cursor 初始化为位置 -1,因此当您调用 moveToNext() 时,如果光标 return 为真到达位置 0,这意味着数据库至少获取了一个值。
使用这个
if(cursor.moveToNext()){
//database fetched at least one value
}