Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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/3/android/178.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
Android-java.lang.IllegalStateException:尝试重新打开已关闭的对象:SQLiteQuery:从rowid=40495的表中选择*_Java_Android_Sqlite - Fatal编程技术网

Android-java.lang.IllegalStateException:尝试重新打开已关闭的对象:SQLiteQuery:从rowid=40495的表中选择*

Android-java.lang.IllegalStateException:尝试重新打开已关闭的对象:SQLiteQuery:从rowid=40495的表中选择*,java,android,sqlite,Java,Android,Sqlite,在我的活动中,我请求API并从中获取数据,然后将数据插入我的SQLite数据库。然后我把这个方法叫做: public long getResultCount() { SQLiteDatabase db = this.getReadableDatabase(); long cnt = DatabaseUtils.queryNumEntries(db, TABLE_NAME); return cnt; } 这个方法在其他java类中,它在我的活动中正常工作。调用此方法后,

在我的活动中,我请求API并从中获取数据,然后将数据插入我的SQLite数据库。然后我把这个方法叫做:

public long getResultCount() {
    SQLiteDatabase db = this.getReadableDatabase();
    long cnt  = DatabaseUtils.queryNumEntries(db, TABLE_NAME);
    return cnt;
}
这个方法在其他java类中,它在我的活动中正常工作。调用此方法后,我调用该方法:

public ArrayList<Integer> getId(int i, int j) {

    ArrayList<Integer> array_list = new ArrayList<Integer>();

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery("select * from "
            + TABLE_NAME
            + " limit " + i + "," + j
            , null);
    res.moveToFirst();

    while (!res.isAfterLast()) {
        array_list.add(Integer.parseInt(res.getString(res.getColumnIndex(COLUMN_ID))));
        res.moveToNext();
    }
    return array_list;
}

您在返回数组列表之前忘记了
res.close

您的
getResult()
方法正在返回closed
游标。你不能对任何东西使用封闭的游标

或者不
close()
将光标置于
getResult()
中。或者在关闭之前捕获所需的数据并返回数据,而不是光标。

for(int i=0;ifor (int i = 0; i < temp.size(); i++) {

        Cursor rs = db.getResult(temp.get(i));
        rs.moveToFirst();
        ...
        rs.close();
    }
游标rs=db.getResult(temp.get(i)); rs.moveToFirst(); ... rs.close(); }

关闭光标是否有任何条件?如果没有-游标将在第一次迭代后关闭,第二次迭代时将出现异常。

您的意思是我在方法getId中返回数组列表之前添加res.close()?我尝试了一下,但错误再次出现。这不是stacktrace OP posted的解决方案。如果异常在您发布的最后一个段中,则
getID()
将返回关闭的游标。您没有发布其代码。您的确切意思是什么?请发布
getID()
code。你发布的
getid()
有些不同。我编辑了这个问题。
public Cursor getResult(int Id) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery("select * from " + TABLE_NAME + " where " + COLUMN_ID + "=" + Id + "", null);
    res.close();
    return res;
}
for (int i = 0; i < temp.size(); i++) {

        Cursor rs = db.getResult(temp.get(i));
        rs.moveToFirst();
        ...
        rs.close();
    }