sqlite cursorindexoutofbound异常

时间:2015-04-03 19:52:31

标签: android sqlite

  

在我的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

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