我试图从我的数据库中获取一个联系人,我继续请求索引0,大小为0错误。
这是我的代码:
// Getting single contact
Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[]
{ COLUMN_ID, COLUMN_FULLNAME, COLUMN_PHONE, COLUMN_EMAIL, COLUMN_ADDRESS, COLUMN_SITE, COLUMN_BIRTHDAY },
COLUMN_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
db.close();
cursor.close();
return contact;
}
这是我得到的错误:
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
请帮助我了解该怎么做......
答案 0 :(得分:1)
您的查询与任何数据都不匹配。
检查moveTo...()
的结果以了解光标是否指向有效行:如果移动未成功,则方法调用返回false。要使查询匹配数据并返回行,请检查查询选择条件。
此外,SQLiteDatabase
查询方法永远不会为null
返回Cursor
,因此!= null
检查是多余的。
答案 1 :(得分:1)
编辑:尝试这种方法,它应该可以工作。
Contact getContact(int id) {
Contact contact = null;
String query = "SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " = " + id;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
if(cursor.moveToFirst()) {
cursor.moveToFirst();
contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
}
cursor.close();
return contact;
}
也许改变:
if (cursor != null)
cursor.moveToFirst();
使用:
if(cursor.moveToFirst())
对于这个Android Reference on Cursor,如果光标是emtpy,则moveToFirst()返回false。
答案 2 :(得分:0)
可能是你的桌子是空的。
尝试将条件更改为
if (cursor.moveToFirst())
{
Contact contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
}