2012-04-20 107 views
37

我正在使用自定義適配器擴展遊標適配器來在列表視圖中顯示數據,以顯示特定的電話號碼我已將ID傳遞給數據庫類中的方法,但它正顯示出android.database.CursorIndexOutOfBoundsException:請求索引0,大小爲0

errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

,同時將調試器的方法它不會行

num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 

後的任何一個可以幫助我解決這個問題。 這是代碼:

public String getNumberFromId(int id) 
{ 
    String num; 
    db= this.getReadableDatabase(); 
    Cursor cursor = db.query(scheduletable, new String[] { "ContactNumber" },"_id="+id, null, null, null, null); 
    cursor.moveToFirst(); 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
    cursor.close(); 
    db.close(); 
    return num; 
} 

回答

7

檢查從moveToFirst()返回值,您嘗試讀取從遊標任何​​事情之前。看起來好像沒有結果被返回。

15

試試這個。這將避免拋出異常,當光標是空..

if(cursor != null && cursor.moveToFirst()){ 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
    cursor.close(); 
} 
+0

此代碼適用於我...我確實想要xactly。 – 2015-02-15 07:29:46

+2

如果cursor爲null,則此代碼將在cursor.close()上崩潰。 – Mark 2015-02-19 01:11:13

+0

檢查'if(cursor.getCount()!= 0)'是否同樣好? – 2016-03-31 00:06:08

91

當你正在處理光標,經常檢查空和檢查moveToFirst()沒有失敗。

if(cursor != null && cursor.moveToFirst()){ 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
    cursor.close(); 
} 

地點日誌適當地以查看它是否被返回null或空光標。據此檢查你的查詢。

更新把兩個支票放在一個聲明中,正如Jon在下面的評論中提到的那樣。

更新2close()調用放在有效的遊標範圍內。

+2

由於Java對'&&'的懶惰評估,您可以簡單地執行'if(cursor!= null && cursor.moveToFirst()){...}' – 2013-05-27 11:59:48

+1

感謝您指出這一點。更新:) – Shubhayu 2013-05-27 12:49:32

+0

非常感謝@Shubhayu它解決了我的問題。 – indraja 2013-09-18 12:02:55

4

保存架構查詢Cursor s是

// just one 
Cursor cursor = db.query(...); 
if (cursor != null) { 
    if (cursor.moveToFirst()) { 
     value = cursor.getSomething(); 
    } 
    cursor.close(); 
} 

// multiple columns 
Cursor cursor = db.query(...); 
if (cursor != null) { 
    while (cursor.moveToNext()) { 
     values.add(cursor.getSomething()); 
    } 
    cursor.close(); 
} 
10

首先檢查獲取數據

if(cursor!=null && cursor.getCount()>0){ 
    cursor.moveToFirst(); 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
} 
相關問題