Android-java.lang.IllegalStateException:尝试重新打开已关闭的对象:SQLiteQuery:从rowid=40495的表中选择*
在我的活动中,我请求API并从中获取数据,然后将数据插入我的SQLite数据库。然后我把这个方法叫做: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类中,它在我的活动中正常工作。调用此方法后,
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();
}