在我的android应用程序中,我使用以下函数从表中检索列。该表包含值,但它有一个例外。
public String[] getactivelist(){
Log.v("ppp","getactivelist");
String[] actname=new String[50];
SQLiteDatabase db = this.getWritableDatabase();
Log.v("ppp","dbcrtd");
Cursor cursor = db.rawQuery("SELECT name FROM activelist ORDER BY time ASC", null);
Log.v("ppp","aftrcurser");
int i=0;
Log.v("ppp crsr",cursor.getString(0));
if (cursor.moveToFirst()) {
do {
actname[i]=cursor.getString(0);
Log.v("ppp crsr",cursor.getString(0));
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return actname;
}
log cat显示以下错误
04-04 01:19:41.170 2581-2601/com.example.pranavtv.loudspeaker V/ppp﹕ tryandroid.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 2
答案 0 :(得分:0)
在你的行
Log.v("ppp crsr", cursor.getString(0));
您尝试从光标中获取字符串。如果没有任何行,则应该抛出错误。
答案 1 :(得分:0)
您正在呼叫以下行...
Log.v("ppp crsr",cursor.getString(0));
...在使用...
移动Cursor
的位置之前
if (cursor.moveToFirst()) {
默认情况下,Cursor
的位置最初设置为-1,在第一个有效位置之前,因为包含数据的第一个位置是位置0。
只需删除该行(if(...)
之前的那一行)就可以了。
另一方面,在你正在使用的do...while
循环中......
actname[i]=cursor.getString(0);
...但你永远不会增加i
。因此,无论向actname[0]
返回多少结果,您都只能修改Cursor
。