android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为0
我在撞车报告中发现了这个错误,但无法理解它的含义。我想这是因为如果我的游标为空,我要返回-1。这会导致坠机。但我不确定为什么我的游标为空?DB类中的这个方法在我的一个活动的onResume中被调用。在onCreate中调用它会更好吗(这样它只调用一次) 这个代码会更好吗android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为0,android,database,android-sqlite,Android,Database,Android Sqlite,我在撞车报告中发现了这个错误,但无法理解它的含义。我想这是因为如果我的游标为空,我要返回-1。这会导致坠机。但我不确定为什么我的游标为空?DB类中的这个方法在我的一个活动的onResume中被调用。在onCreate中调用它会更好吗(这样它只调用一次) 这个代码会更好吗 public int getLastId() throws SQLException{ String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_LEVEL
public int getLastId() throws SQLException{
String[] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_LEVEL, KEY_MONEY, KEY_DAYSLEFT, KEY_VOTES, KEY_CORRUPTION};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns,null , null, null, null, null);
if(c != null){
c.moveToLast();
int id = c.getInt(0);
return id;
}
return 0;
}
这可能是由
moveToLast()
调用引发的,您得到它是因为游标没有行,可能是因为您的表是空的。似乎您有一个空游标。因此,还要检查光标计数。改变
if(c != null){
c.moveToLast();
int id = c.getInt(0);
return id;
}
到
感谢Commonware,但是桌子不是空的,因为这种情况并非总是发生,只是有时会发生。上面编辑的代码会更好吗?@user3812501:“但是表不是空的”--因为您没有检查返回行的计数,我看不出您是如何知道表不是空的。好的一点,我猜它不是空的,是因为此调用大部分时间都有效(该数据库中只有一个表,是在调用之前创建的)我将尝试一下。我是否仍将默认值保留为return-1?@user3812501如果表为空,则取决于您想要什么。
if(c != null){
c.moveToLast();
int id = c.getInt(0);
return id;
}
if(c != null && c.getCount() > 0){
c.moveToLast();
int id = c.getInt(0);
return id;
}