Java CursorIndexOutOfBoundsException:请求索引-1,大小为1
我正在创建一个存储日记条目的应用程序。在检索日记条目时,我会得到一个Java CursorIndexOutOfBoundsException:请求索引-1,大小为1,java,android,exception,Java,Android,Exception,我正在创建一个存储日记条目的应用程序。在检索日记条目时,我会得到一个CursorIndexOutOfBoundsException,我相信这与我的SELECT语句有关,以获取数据库中的信息 getDAO = new DAO(this); Cursor showDiaryEntries = getDAO.queryDiary(Diary.DiaryItem.FULL_PROJECTION, Diary.DiaryItem.COLUMN_NAME_DIARY_TITLE+" = "+
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);
我一直在阅读关于这种类型的异常的文章,并且相信这可能与我得到字符串/长时有关,因为我没有循环?虽然我并不完全理解这一点
日志目录
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
我希望有人能教育我问题出在哪里。
谢谢请务必拨打:
showDiaryEntries.moveToFirst();
在开始对光标执行任何操作之前,请执行此操作。这将确保光标从数据库的第一行开始 一定要打电话:
showDiaryEntries.moveToFirst();
在开始对光标执行任何操作之前,请执行此操作。这将确保光标从数据库的第一行开始 填充光标时,光标位于第一条记录之前(索引为0);现在,光标索引为-1,对应于无记录位置 因此,您会得到一个错误(您试图从没有行的列中获取值)
这就是为什么在开始使用光标之前,您应该始终先移动光标。填充光标时,光标位于第一条记录之前(索引为0);现在,光标索引为-1,对应于无记录位置 因此,您会得到一个错误(您试图从没有行的列中获取值)
这就是为什么在开始使用光标之前,您应该始终先移动光标。首先确保光标处于 *
不为空
*然后将其移动到第一个位置
if(showDiaryEntries!=null && showDiaryEntries.moveToFirst())
{
//Now do waht ever u want to do with cursor
}
上面的代码将解决您现在面临的问题,以及您将来可能面临的问题。首先确保您的光标是正确的 *
不为空
*然后将其移动到第一个位置
if(showDiaryEntries!=null && showDiaryEntries.moveToFirst())
{
//Now do waht ever u want to do with cursor
}
上面的代码将解决您现在面临的问题以及将来可能面临的问题。下面的代码用于获取光标值
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());
}
}
我提供字符串作为示例。因此,使用长字符串字段更新函数。以下代码用于获取光标值
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());
}
}
我提供字符串作为示例。因此,使用长字符串字段更新函数。在从
光标获取值之前,在光标上调用moveToFirst()
。在从光标上获取值之前,在光标上调用moveToFirst()
。谢谢!我最初使用showDiaryEntries.moveToFirst,但在没有任何条目时遇到了一个问题,但我想添加一个条目,因为它正在查找数据库中不存在的数据。这对我有帮助。感谢使用这两个showDiaryEntries.getCount>0&&showDiaryEntries.moveToFirst()
是内部冗余moveToFirst()
调用moveToPosition(0)
,返回getCount()>位置代码>@Selvin是的,你是对的,我编辑了may ans.。谢谢你指出这是不应该显示日记条目的=空..等等?@ChristopherHarris谢谢兄弟..我更正了我的答案。快乐编码!!非常感谢。我最初使用showDiaryEntries.moveToFirst,但在没有任何条目时遇到了一个问题,但我想添加一个条目,因为它正在查找数据库中不存在的数据。这对我有帮助。感谢使用这两个showDiaryEntries.getCount>0&&showDiaryEntries.moveToFirst()
是内部冗余moveToFirst()
调用moveToPosition(0)
,返回getCount()>位置代码>@Selvin是的,你是对的,我编辑了may ans.。谢谢你指出这是不应该显示日记条目的=空..等等?@ChristopherHarris谢谢兄弟..我更正了我的答案。快乐编码!!