游标索引超出范围“索引0请求:大小为0”

时间:2011-03-15 18:32:26

标签: android

当我在数据库中搜索某些内容时,我正在使游标索引超出范围“索引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语句,但它没有那么远

2 个答案:

答案 0 :(得分:16)

如果Cursor.moveToFirst()为空,则

Cursor返回false。来自Cursor调用的返回query()将永远不会为null,但可能为空。你永远不会检查光标是否为空。

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()方法。

答案 1 :(得分:5)

在检索值时,您必须使用cursor.moveToNext;

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