2011-03-15 12 views
6

मुझे कर्सर इंडेक्स सीमाओं से बाहर हो रहा है "इंडेक्स 0 अनुरोध किया गया है: आकार 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 
} 

अगर नंबर नहीं मिला है इसे किसी और बयान करना चाहिए, लेकिन यह नहीं मिलता है अब तक

उत्तर

16

Cursor.moveToFirst()Cursor खाली है तो झूठी वापसी करता है। 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

+0

बहुत बढ़िया, धन्यवाद रॉबी, जो कि बहुत उपयोगी था, वही cur == शून्य मुद्दा प्राप्त कर रहा था! :) – Soham

5

आप मूल्य पुनर्प्राप्त जब आप cursor.moveToNext;

if (cursor.moveToFirst()){ 
    do{ 
     String data = cursor.getString(cursor.getColumnIndex("data")); 
     // do what ever you want here 
    }while(cursor.moveToNext()); 
} 
संबंधित मुद्दे