2015-04-03 39 views
0

在我的android应用程序中,我使用以下函数从表中检索列......表中包含值,但它有一个例外。sqlite cursorindexoutofbound exception

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; 
    } 

日志猫显示以下错误

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

在你行

Log.v("ppp crsr", cursor.getString(0)); 

你尝试从光标的字符串。如果没有任何行,它应该抛出观察到的错误。

0

要调用下面的行...

Log.v("ppp crsr",cursor.getString(0)); 

...之前您移动使用Cursor的位置...

if (cursor.moveToFirst()) { 

默认的位置Cursor初始设置为-1即之前第一个有效位置,因为包含数据的第一个位置是位置0.

只需删除该行(if(...)之前的那一行)即可。

在另一方面,在do...while循环使用的是...

actname[i]=cursor.getString(0); 

...但你永远不增加i。因此无论有多少结果返回到Cursor,您都将只修改actname[0]