Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CursorIndexOutOfBoundsException:请求索引-1,大小为1_Java_Android_Exception - Fatal编程技术网

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谢谢兄弟..我更正了我的答案。快乐编码!!