我正在尝试从数据库中提取记录但我收到错误。
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
以下是我用来提取记录的代码。
public String[] getSingleTransaction(String table, String id) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = null;
String[] data = new String[4];
try{
cursor = db.query(table, new String[] {KEY_ID, KEY_CREDIT, KEY_DEBIT, KEY_MEMO, KEY_TIMESTAMP}, KEY_ID + "=?",
new String[] {String.valueOf(id)}, null, null, null, null);
if(cursor != null) {
cursor.moveToFirst();
data[0] = cursor.getString(0); //This is where I am getting the error.
data[1] = cursor.getString(1);
data[2] = cursor.getString(2);
data[3] = cursor.getString(3);
data[4] = cursor.getString(4);
}
return data;
}finally {
cursor.close();
}
}
有人能够看到我在这里做错了吗?
答案 0 :(得分:0)
我注意到的第一件事是你正在访问5个元素..但你的数组是用4声明的。你的数组必须有 5个元素 (大小5) ..所以它将被声明为:
String[] data = new String[5];
然后在访问光标之前,你必须检查它是否成功'移到第一个位置......用这个:
boolean success = cursor.moveToFirst();
如果它是真的'然后你可以访问光标。在你的情况下,它将返回' FALSE'如果您的查询将导致无结果.EMPTY结果。
答案 1 :(得分:0)
改变这个:
if(cursor != null) {
cursor.moveToFirst();
data[0] = cursor.getString(0); //This is where I am getting the error.
data[1] = cursor.getString(1);
data[2] = cursor.getString(2);
data[3] = cursor.getString(3);
data[4] = cursor.getString(4);
}
到此:
if(cursor != null) {
if(cursor.moveToFirst()) {
data[0] = cursor.getString(0); //This is where I am getting the error.
data[1] = cursor.getString(1);
data[2] = cursor.getString(2);
data[3] = cursor.getString(3);
data[4] = cursor.getString(4);
}
}
我认为问题是你的游标不是null但是没有返回值,这就是它崩溃的原因。
PD:您应该像另一个答案所说的那样增加String
数组:),如下所示:
String[] data = new String[5];