请求索引0,大小为0

时间:2014-08-14 18:14:00

标签: android android-sqlite

我正在尝试从数据库中提取记录但我收到错误。

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

有人能够看到我在这里做错了吗?

2 个答案:

答案 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];