Java 获得;CursorIndexOutOfBoundsException“;

Java 获得;CursorIndexOutOfBoundsException“;,java,android,sqlite,Java,Android,Sqlite,我正在尝试检索sqlite数据库的数据。并把它放在一个字符串上进一步显示,但我得到了这个错误,请帮助我解决这个错误 这是显示错误的logcat数据 12-31 13:18:55.141: E/1.6(3833): 2222 12-31 13:18:55.191: E/1.2.2(3833): android.database.CursorIndexOutOfBoundsException: Index 9 requested, with a size of 9 12-31 13:18:5

我正在尝试检索sqlite数据库的数据。并把它放在一个字符串上进一步显示,但我得到了这个错误,请帮助我解决这个错误

这是显示错误的logcat数据

    12-31 13:18:55.141: E/1.6(3833): 2222
12-31 13:18:55.191: E/1.2.2(3833): android.database.CursorIndexOutOfBoundsException: Index 9 requested, with a size of 9
12-31 13:18:55.191: E/1.7(3833): 2222
这是一段显示错误的代码

public String getdata() {
        // TODO Auto-generated method stub
        Log.e("1.1", "2222");
        String[] column = new String[]{KEY_ROWID, KEY_NAME, KEY_HOTNESS };
        Log.e("1.2", "2222");
        Cursor c = ourDatabase.query(DATABASE_TABLE, column, null, null, null, null, null);
        Log.e("1.3", "2222");
        String result = "";
        Log.e("1.4", "2222");

    int iRow = c.getColumnIndex(KEY_ROWID);
    int iName = c.getColumnIndex(KEY_NAME);
    int iHotness = c.getColumnIndex(KEY_HOTNESS);
    Log.e("1.5", "2222");

    try{
        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext());
        {
            Log.e("1.6", "2222");

            result = result + c.getString(0) + " " + c.getString(1) + " " + c.getString(2) + "\n";
        }
    }catch(Exception e)
    {

        Log.e("1.2.2", e.toString());
    }

    Log.e("1.7", "2222");
    return result;
}
注意:将以下代码放入try catch后,它将移动到下一个活动,但不显示任何结果数据

        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext());
        {
            Log.e("1.6", "2222");

            result = result + c.getString(0) + " " + c.getString(1) + " " + c.getString(2) + "\n";
        }
下一个活动代码:

TextView tv = (TextView) findViewById(R.id.textView3);

    Log.e("1", "111111");
    HotOrNot info = new HotOrNot(this);
    Log.e("2", "111111");
    info.open();
    Log.e("3", "111111");
    String data = info.getdata();
    Log.e("4", "111111");
    info.close();
    Log.e("5", "111111");
    tv.setText(data);

    Log.e("6", "111111");
}

}分号太多了:

for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()); // look here :(
。。。因此,您的
for
循环将运行到光标的末尾。之后,您尝试从光标获取一些数据,但失败了,因为您已经在最后一个条目之后了

就用这个吧:

while(c != null && c.moveToNext())
{
    Log.e("1.6", "2222");

    result = result + c.getString(0) + " " 
                    + c.getString(1) + " " 
                    + c.getString(2) + "\n";
}

很可能您可以跳过
c!=空

表示您试图在游标中使用超出范围的值。特别是在错误显示的哪一行??您的循环条件是错误的。您不检查moveToFirst的返回值
!=可以跳过null
。查询函数返回游标或引发异常。至少它不会在循环中变为null。@laalto:一般来说,你是对的,不过我认为检查null并不是一个坏主意;)