CursorIndexOutOfBoundsException:请求索引-1,大小为1

时间:2014-03-07 12:33:19

标签: java android exception

我正在创建一个存储日记条目的应用程序。检索日记条目后,我得到一个CursorIndexOutOfBoundsException,我相信这与我的SELECT语句有关,可以在数据库中获取信息。

    getDAO = new DAO(this);
    Cursor showDiaryEntries = getDAO.queryDiary(Diary.DiaryItem.FULL_PROJECTION, Diary.DiaryItem.COLUMN_NAME_DIARY_TITLE+" = "+fieldTitle, null);


    Long fieldDate = showDiaryEntries.getLong(1);
    Long fieldTime = showDiaryEntries.getLong(2);
    String fieldEntry = showDiaryEntries.getString(3);

    mDate.setText(String.valueOf(fieldDate));
    Log.i(TAG,"Field Date "+ fieldDate);
    mTime.setText(String.valueOf(fieldTime));
    Log.i(TAG,"Field Time "+ fieldTime);
    mEntry.setText(fieldEntry);
    Log.i(TAG,"Field Entry "+ fieldEntry);

我一直在阅读这种类型的异常,并且相信它可能与我获得String / Long时有关,因为我没有循环?虽然我不完全理解这一点。

Log Cat

03-07 07:10:59.475: E/AndroidRuntime(1471): FATAL EXCEPTION: main
03-07 07:10:59.475: E/AndroidRuntime(1471): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.democo.mydiary/com.democo.mydiary.DiaryEntryActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

我希望有人能够教育我这个问题是什么。 感谢

4 个答案:

答案 0 :(得分:5)

请务必致电:

showDiaryEntries.moveToFirst();

在开始对光标做任何事情之前执行此操作。这将确保光标从数据库的第一行开始!

答案 1 :(得分:3)

首先确保你的光标是

* not null

* Then move it to first position

if(showDiaryEntries!=null &&  showDiaryEntries.moveToFirst())
{
//Now do waht ever u want to do with cursor
 }

以上代码将解决您现在面临的问题,以及您将来可能面临的问题。

答案 2 :(得分:1)

填充光标时,它位于第一条记录之前(索引为0);现在你的光标索引是-1,这对应于没有记录位置。

因此,您会收到错误(您尝试从无行的列中获取值)。

这就是为什么你应该在开始使用光标之前始终先移动光标。

答案 3 :(得分:0)

以下代码用于获取游标值。

Cursor showDiaryEntries= dbh.database_function();
if (showDiaryEntries.getCount() != 0 && showDiaryEntries!=null) {
    if (showDiaryEntries.moveToFirst()) {
        do {
            fieldEntry  = showDiaryEntries.getString(showDiaryEntries.getColumnIndex("database feild name here"));

        } while (showDiaryEntries.moveToNext());

    }
}

我提供一个例子字符串。所以用你的长字符串字段更新你的函数..