2013-01-21 100 views
0

我試圖檢索我的數據庫中的人的名字。目前我得到一個越界的錯誤。Android遊標越界異常索引0

我知道數據存在,即時嘗試檢索,因爲我有一個列表視圖,顯示數據庫中的所有數據。

IF ELSE檢查:

NameAppointPass.open(); 
    String nameReturned = NameAppointPass.getName(sentID); 
    if(nameReturned != "") 
    { 
     Dialog d = new Dialog(this); 
     d.setTitle("returned"); 
     TextView txt = new TextView(this); 
     txt.setText("win"); 
     d.setContentView(txt); 
     d.show(); 
    } 
    else 
    { 
     Dialog d = new Dialog(this); 
     d.setTitle("empty"); 
     TextView txt = new TextView(this); 
     txt.setText("Fail"); 
     d.setContentView(txt); 
     d.show(); 
    } 

希望有人可以看到我要去哪裏錯了。

目前,我發現了以下錯誤:

01-21 21:41:43.753: E/AndroidRuntime(276): FATAL EXCEPTION: main 
01-21 21:41:43.753: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.flybase2/com.example.flybase2.addAppointment}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

我使用的onclick「長變量」,如圖送我從列表視圖想要的數據的ID:

public void onListItemClick(ListView list, View v, int list_posistion, long item_id) 
{ 

    long idToPass = item_id; 

    Intent setName = new Intent("com.example.flybase2.addAppointment"); 
    setName.putExtra("newPassedID", idToPass); 
    startActivity(setName); 
} 

然後通過綁定將其發送到對象實例'NameAppointPass',如下所示:

NameAppointPass.open(); 
String nameReturned = NameAppointPass.getName(sentID); 

Th Ë下面的代碼顯示getName該查詢的數據庫的方法,並應返回存儲在所選擇的ID名稱,而是我得到的錯誤:

public String getName(long passedID) { 

     String [] columns = new String[]{KEY_ROWAPPID, KEY_NAMEAPP, KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP}; 
     Cursor c = ourDatabase.query(DATABASE_TABLEAPP, columns, KEY_ROWAPPID + "=" + passedID, null, null, null, null); 
     if(c != null) 
     { 
     c.moveToFirst(); 
     String name = c.getString(1); 
     return name; 
     } 

     return null; 
    } 

回答

2

如果光標可以是空的,你可以檢查光標沒有數據:

 if(c != null && c.getCount() > 0) 

爲了進一步診斷爲什麼光標在不同的地方清空放置日誌語句來檢查,如果該項目ID仍然是正確的。

+0

+1,正如你所說'if(c!= null)'不檢查遊標是否爲_empty_。 – Sam

+0

@Sam我在返回的String Sam上添加了'IF ELSE'檢查。 (如我編輯和顯示在我原來的問題)。如果我添加檢查以確保行已經返回(即像Henrry所述),但沒有計數檢查它仍然崩潰,程序不會再崩潰!此外,'IF'聲明返回true,表明'nameReturned'不等於沒有結果。目前非常困惑! - – user1352057

+0

@ user1352057根本問題是沒有行,其中'KEY_ROWAPPID +「=」+ passedID' ...仔細檢查「passedID」的值。 – Sam

0

管理得到這個排序。最後,我錯誤地命名了我的變量來保存傳入的ID。