Java 获得;CursorIndexOutOfBoundsException“;
我正在尝试检索sqlite数据库的数据。并把它放在一个字符串上进一步显示,但我得到了这个错误,请帮助我解决这个错误 这是显示错误的logcat数据Java 获得;CursorIndexOutOfBoundsException“;,java,android,sqlite,Java,Android,Sqlite,我正在尝试检索sqlite数据库的数据。并把它放在一个字符串上进一步显示,但我得到了这个错误,请帮助我解决这个错误 这是显示错误的logcat数据 12-31 13:18:55.141: E/1.6(3833): 2222 12-31 13:18:55.191: E/1.2.2(3833): android.database.CursorIndexOutOfBoundsException: Index 9 requested, with a size of 9 12-31 13:18:5
12-31 13:18:55.141: E/1.6(3833): 2222
12-31 13:18:55.191: E/1.2.2(3833): android.database.CursorIndexOutOfBoundsException: Index 9 requested, with a size of 9
12-31 13:18:55.191: E/1.7(3833): 2222
这是一段显示错误的代码
public String getdata() {
// TODO Auto-generated method stub
Log.e("1.1", "2222");
String[] column = new String[]{KEY_ROWID, KEY_NAME, KEY_HOTNESS };
Log.e("1.2", "2222");
Cursor c = ourDatabase.query(DATABASE_TABLE, column, null, null, null, null, null);
Log.e("1.3", "2222");
String result = "";
Log.e("1.4", "2222");
int iRow = c.getColumnIndex(KEY_ROWID);
int iName = c.getColumnIndex(KEY_NAME);
int iHotness = c.getColumnIndex(KEY_HOTNESS);
Log.e("1.5", "2222");
try{
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext());
{
Log.e("1.6", "2222");
result = result + c.getString(0) + " " + c.getString(1) + " " + c.getString(2) + "\n";
}
}catch(Exception e)
{
Log.e("1.2.2", e.toString());
}
Log.e("1.7", "2222");
return result;
}
注意:将以下代码放入try catch后,它将移动到下一个活动,但不显示任何结果数据
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext());
{
Log.e("1.6", "2222");
result = result + c.getString(0) + " " + c.getString(1) + " " + c.getString(2) + "\n";
}
下一个活动代码:
TextView tv = (TextView) findViewById(R.id.textView3);
Log.e("1", "111111");
HotOrNot info = new HotOrNot(this);
Log.e("2", "111111");
info.open();
Log.e("3", "111111");
String data = info.getdata();
Log.e("4", "111111");
info.close();
Log.e("5", "111111");
tv.setText(data);
Log.e("6", "111111");
}
}分号太多了:
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()); // look here :(
。。。因此,您的for
循环将运行到光标的末尾。之后,您尝试从光标获取一些数据,但失败了,因为您已经在最后一个条目之后了
就用这个吧:
while(c != null && c.moveToNext())
{
Log.e("1.6", "2222");
result = result + c.getString(0) + " "
+ c.getString(1) + " "
+ c.getString(2) + "\n";
}
很可能您可以跳过
c!=空
表示您试图在游标中使用超出范围的值。特别是在错误显示的哪一行??您的循环条件是错误的。您不检查moveToFirst的返回值!=可以跳过null
。查询函数返回游标或引发异常。至少它不会在循环中变为null。@laalto:一般来说,你是对的,不过我认为检查null并不是一个坏主意;)