android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0

时间:2012-04-20 10:11:27

标签: android database cursor

我正在使用自定义适配器扩展游标适配器在listview中显示数据,以显示我已将id传递给数据库类中的方法的特定电话号码但是它正在显示

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 个答案:

答案 0 :(得分:105)

每当你处理游标时,总是检查空值并检查moveToFirst()。{/ p>

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

正确放置日志以查看它是返回null还是空光标。根据检查你的查询。

更新将这两项检查放在Jon在下面的评论中提到的单个语句中。

更新2 close()调用放在有效的游标范围内。

答案 1 :(得分:18)

尝试这个..这将避免在光标为空时抛出异常..

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

答案 2 :(得分:11)

首先在获取数据之前检查此条件

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

答案 3 :(得分:7)

在尝试从光标读取任何内容之前,检查moveToFirst()的返回值。看起来好像没有返回任何结果。

答案 4 :(得分:5)

查询Cursor的保存模式是

// 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();
}

答案 5 :(得分:0)

如果人们还在寻找:

尝试搜索"ContactNumber",而不是搜索Phone.NUMBER。本教程的代码包含更多详细信息:http://developer.android.com/training/basics/intents/result.html

答案 6 :(得分:0)

尝试卸载该应用程序,然后再次对其进行测试...实际上,在首次安装该应用程序时,sqlite数据库仅创建一次...因此,如果您认为自己的逻辑是最新的,那么重新安装该应用程序将为您解决问题您。 !!!!