2011-03-15 61 views
6

當我在數據庫中搜索某些內容時,我得到的索引超出了「index 0 requested:with size 0」的錯誤。我在我的數據庫中搜索的項目目前不存在,我知道這一點,但我如何處理該項目不存在的查詢。遊標索引超出範圍「索引0請求:大小爲0」

我的電話號碼發送

public String searchNumber(Context context,String number){ 

    ContactDB db = new ContactDB(context); 
    db.open(); 
    Cursor curs = db.getIdFromPhone(number); 
    String test = curs.getString(curs.getColumnIndex(db.PHONE_NUMBER)); //fails here 
    curs.close(); 
    db.close(); 
    return test; 
} 

查詢

public Cursor getIdFromPhone(String where){ 
    Cursor cur = db.query(DATABASE_TABLE, new String [] {ID,PHONE_NUMBER} 
    , PHONE_NUMBER + "='" + where + "'",null,null,null,null); 
    if(cur != null) 
     cur.moveToFirst(); 

    return cur; 
} 

測試搜索

from = messages.getDisplayOriginatingAddress(); 
String dbNumber = searchNumber(arg0,from); 
      if(dbNumber.equals(from)){ 
     //do stuff 
}else{ 
    //do other stuff 
} 

如果數量沒有找到它應該做的else語句,但是它沒有得到那麼遠

回答

16

Cursor.moveToFirst()如果Cursor爲空,則返回false。來自query()調用的返回Cursor永遠不會爲空,但它可能爲空。你永遠不會檢查遊標是否爲空。

public String searchNumber(Context context,String number){ 

    ContactDB db = new ContactDB(context); 
    db.open(); 
    Cursor curs = db.query(DATABASE_TABLE, new String [] {ID,PHONE_NUMBER} 
     , PHONE_NUMBER + "='" + number + "'",null,null,null,null); 
    String test = null; 
    if(curs.moveToFirst()) { //edit 
     test = curs.getString(curs.getColumnIndex(db.PHONE_NUMBER)); //fails here 
    } 
    curs.close(); 
    db.close(); 
    return test; // this will be null if the cursor is empty 
} 

並擺脫getIdFromPhone()方法。

+0

池塘,我不能擺脫getIDFromPhone的,因爲我不能訪問的查詢,除非我是在數據庫類,這是該方法所做的內部。我也得到一個空指針異常這樣做你的方式。它會更容易轉換爲布爾值,因爲我需要知道數字是否存在於數據庫中 – tyczj 2011-03-16 04:13:33

+0

真棒,感謝羅比,這是超級有用的,得到相同的cur == null問題! :) – Soham 2011-11-04 06:55:54

5

當你retrive價值,你必須使用cursor.moveToNext;

if (cursor.moveToFirst()){ 
    do{ 
     String data = cursor.getString(cursor.getColumnIndex("data")); 
     // do what ever you want here 
    }while(cursor.moveToNext()); 
} 
相關問題