我正在创建一个存储日记条目的应用程序。检索日记条目后,我得到一个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
我希望有人能够教育我这个问题是什么。 感谢
答案 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());
}
}
我提供一个例子字符串。所以用你的长字符串字段更新你的函数..