Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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/selenium/4.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 通过空检查的游标索引越界异常_Java_Android_Sqlite - Fatal编程技术网

Java 通过空检查的游标索引越界异常

Java 通过空检查的游标索引越界异常,java,android,sqlite,Java,Android,Sqlite,我在这里查了一大堆问题,找不到正确答案。我在从数据库检索数据时遇到问题。我得到android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为0exception。我创建数据库的代码: String KREIRAJ_TABELU = "CREATE TABLE " + IME_TABELE + "(" + ID + " INTEGER PRIMARY KEY," + PITANJE + " TEXT," + PRVI_N

我在这里查了一大堆问题,找不到正确答案。我在从数据库检索数据时遇到问题。我得到android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为0exception。我创建数据库的代码:

   String KREIRAJ_TABELU = "CREATE TABLE " + IME_TABELE + "("
    + ID + " INTEGER PRIMARY KEY," + PITANJE + " TEXT,"
    + PRVI_NETACAN + " TEXT," + DRUGI_NETACAN + " TEXT," + TRECI_NETACAN + " TEXT," + TACAN_ODGOVOR + " TEXT" + ")";
    db.execSQL(KREIRAJ_TABELU);
    String dodajPitanjaIOdgovore = "INSERT INTO pitanja (ID,PITANJE,PRVI_NETACAN,DRUGI_NETACAN,TRECI_NETACAN,TACAN_ODGOVOR)\n" +
            "VALUES (0,\"Ovo je prvo pitanje:\",\"Netacan odgovor\",\"Netacan odgovor\",\"Netacan odgovor\",\"Tacan odgovor\");\n" +
            "\n" + ...
db.execSQL(dodajPitanjaIOdgovore);
对于检索数据,我使用以下代码:

   SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(IME_TABELE, new String[]{ID,
            PITANJE, PRVI_NETACAN, DRUGI_NETACAN, TRECI_NETACAN, TACAN_ODGOVOR}, ID + "=?",
            new String[]{String.valueOf(id)}, null, null, null, null);
    if(cursor.getCount() > 0)
    {
        cursor.moveToFirst();
    }
    podaciOPitanjima podaci = new podaciOPitanjima(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));
    return podaci;
编辑:我也试过这个:

if (cursor.moveToFirst()) {
    podaciOPitanjima podaci = new podaciOPitanjima(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));
}
else{
    podaciOPitanjima podaci;
}
podaciOPitanjima podaci = new podaciOPitanjima(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));
return podaci;
改变

if (cursor.getCount() > 0) {
    cursor.moveToFirst();
}
//do operations here

说明-问题在于这一行:

使用
cursor.getString
时,光标实际上不在一行上(因为没有行),因此无法获取此命令所要求的单元格/列

完整解决方案:


现在请记住,无论您在何处调用此方法,都可能会返回
null
,您需要检查它。

尝试使用Try catch block..
if(cursor.getCount()>0)
如果此条件为false,您认为会发生什么情况?我用尝试过的代码编辑了我的帖子,但它仍然不起作用。我只是请求了索引0-1@Slay29您的编辑仍然不正确,如果光标中没有任何内容,您仍然可以访问它。如果
cursor.moveToFirst()
为false,则应返回
null
或其他内容,因为光标中没有任何内容。如果
cursor.moveToFirst()
为真,那么返回
podaci
哦,我明白你的意思了!美好的非常感谢你!我当时觉得有点傻,因为我没有充分考虑这一点!再次感谢你!
if (cursor.moveToFirst()) {
    //do operations here
}
podaci = new poda...ima(Integer.parseInt(cursor.getString(0)), ...);
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(IME_TABELE, new String[]{ID, PITANJE, PRVI_NETACAN, DRUGI_NETACAN, TRECI_NETACAN, TACAN_ODGOVOR}, ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null);
podaciOPitanjima podaci = null;
if (cursor.moveToFirst()) {
    //Note: using getColumnIndex avoids errors if the columns are ever returned in a changed order
    podaci = new podaciOPitanjima(
         cursor.getInteger( cursor.getColumnIndex(ID) ), 
         cursor.getString( cursor.getColumnIndex(PITANJE) ), 
         cursor.getString( cursor.getColumnIndex(PRVI_NETACAN) ), 
         cursor.getString( cursor.getColumnIndex(DRUGI_NETACAN) ), 
         cursor.getString( cursor.getColumnIndex(TRECI_NETACAN) ), 
         cursor.getString( cursor.getColumnIndex(TACAN_ODGOVOR) ));
}
return podaci;