2013-05-15 44 views
0

請注意,我試圖從我的android應用程序中的SQLite數據庫表中檢索值,在按鈕單擊事件並通過ListView呈現它。我能夠將記錄插入到表中在同一event.Although它引發以下錯誤:在Android代碼中查詢SQLite時CursorIndexOutOfBoundsException

`05-15 11:54:16.721: W/System.err(1834): android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1 
05-15 11:54:16.721: W/System.err(1834):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:434) 
05-15 11:54:16.721: W/System.err(1834):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
05-15 11:54:16.721: W/System.err(1834):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
` 

Follwing是我使用插入,檢索和顯示的ListView從表中的記錄中的代碼塊:

 save.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
       event=spinner.getSelectedItem().toString(); 
       message=ed1.getText().toString(); 
       MainActivity.myDataBase.openDatabase("/data/data/org.mithil.appname/databases/tablename", null,MainActivity.myDataBase.OPEN_READWRITE); 
       MainActivity.myDataBase.execSQL("INSERT INTO " + 
         MainActivity.tablename + 
         " Values ('"+ finalnumber +"','"+ name +"','"+ message +"','"+ event +"','"+ ldate +"');"); 
       Cursor cu = MainActivity.myDataBase.rawQuery("SELECT Name FROM " + MainActivity.tablename + " WHERE Date =" + ldate +";" , null); 
       cu.moveToFirst(); 
       Log.d("first rec", cu.toString()); 
       while(cu!=null) 
       { 
        try{ 
        lstitem.add(cu.getString(0)); 
        cu.moveToNext(); 
        } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
       } 

這一切都是發生在按鈕click.The插入被反映在表格中,但'選擇'不是。我認爲移動光標時出現了一些問題。該表格由五個字段組成,我只想要檢索一個ie。 '姓名'字段,並將名稱添加到ListView.Kindly糾正我在哪裏我錯了。感謝很多。

+0

嗨感謝suggestion.there是對光標的hasNext()方法class.But有一個名爲「isAfterLast()」方法,它指向最後row.I後的位置將嘗試使用that.Will讓你懂。 – mithil

+0

在我刪除它之前,在那裏發表了一條評論。正在考慮python。 :P – Gjordis

+0

謝謝你@Gjordis,你的解決方案有所幫助。非常感謝。可以與你合作。 :) – mithil

回答

1
while(cu !isAfterLast()){... 

不應該出界了。 它可以是非空的,仍然出界。

2

你應該從光標值這樣

if(cu.moveToFirst()) 
{ 
do 
{ 

}while(cu.moveToNext()) 
} 
+0

感謝您的建議將牢記在心。 :) – mithil

0

試試這個剛剛拿到光標計數,並將其設置爲在for循環的條件,並通過它進行迭代。

for(int i=0;i<cr.getCount;i++) 
{ 
//do your stuff here; 
cr.moveToNext(); 
}