CursorIndexOutOfBoundsException:请求索引0,大小为0?
问题描述:
我想从我的SQLite得到单列database.When我跑这行代码: -CursorIndexOutOfBoundsException:请求索引0,大小为0?
RReckoner_info rReckoner_info = dbHandler.get_subcategory(1);
Log.d("INFO : ", rReckoner_info.getCategory_name());
我得到以下错误: -
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
public RReckoner_info get_subcategory(int id)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_SUBCATEGORY_LIST, new String[]{KEY_NAME,KEY_DESC, KEY_CATEGORY_ID, KEY_CONTENT1,KEY_CONTENTTYPE1,KEY_CONTENT2,KEY_CONTENTTYPE2,KEY_CONTENT3,KEY_CONTENTTYPE3,
KEY_CONTENT4,KEY_CONTENTTYPE4,KEY_CONTENT5,KEY_CONTENTTYPE5,KEY_CONTENT6,KEY_CONTENTTYPE6,KEY_ORDERID,KEY_STATUS ,KEY_UPDATED},KEY_NAME +"=?",
new String[]{String.valueOf(id)},null,null, null,null);
if (cursor !=null)
{
cursor.moveToFirst();
}
RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));
return rReckoner_info;
}
任何人都可以帮助我解决这个问题。任何帮助或建议表示赞赏。谢谢。
答
更改下面的代码
来源:
if (cursor !=null)
{
cursor.moveToFirst();
}
RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));
return rReckoner_info;
要:
if (cursor !=null && cursor.getCount() > 0)
{
cursor.moveToFirst();
RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));
return rReckoner_info;
}
return null;
如果没有找到行,我将返回null
,但可以根据您的要求更改最后一部分,但必须检查光标的count
以避免CursorIndexOutOfBoundsException
。
答
变化
if (cursor !=null)
{
cursor.moveToFirst();
RReckoner_info rReckoner_info = new RReckoner_info(cursor.getString(0),cursor.getString(1),Integer.parseInt(cursor.getString(2)),
cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)
,cursor.getString(7),cursor.getString(8),cursor.getString(9),cursor.getString(10),
cursor.getString(11),cursor.getString(12),cursor.getString(13),cursor.getString(14),
Integer.parseInt(cursor.getString(15)),cursor.getString(16),cursor.getString(17));
return rReckoner_info;
}
return null;
答
有没有您的查询提取的记录,为CursorIndexOutOfBoundsException表示:
An exception indicating that a cursor is out of bounds.
检查是否有至少一个记录:
if (cursor !=null && cursor.getCount() > 0) {
cursor.moveToFirst();
// Code to extract data
}
或者,您可以执行以下操作,因为如果没有记录,moveToFirst将返回false耳鼻喉科
This method will return false if the cursor is empty.
if (cursor != null && cursor.moveToFirst()) {
// Code to extract data
}
它说,没有任何项目返回,并且您正在尝试访问您的光标的第一项。 – SripadRaj
http://stackoverflow.com/a/11257527/2435238可能的重复 – sJy