2015-04-03 49 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]