此外,我的任何设备都没有发生,我收到了很多客户的崩溃报告,如:
java.lang.IllegalStateException: attempt to re-open an already-closed object
崩溃总是发生在 db.query 行(第7行代码)上:
ArrayList<AlarmItem> items = new ArrayList<AlarmItem>();
SQLiteDatabase db = null;
Cursor cursor = null;
try {
db = instance.getReadableDatabase();
// CRASH next line:
cursor = db.query(TABLE_ALARMS, null, null, null, null, null, null);
...
}
} catch (SQLiteException ex) {
...
} finally {
if (cursor != null)
cursor.close();
if (db != null)
db.close();
}
return items;
有谁知道可能是什么原因?谢谢!
编辑:
所有方法都是同步的,因此瞬间不能超过1次操作。 实例是一个单例,所以它不应该是问题。
答案 0 :(得分:0)
如果您尝试将结果分配给已关闭的Cursor
,则可能会发生这种情况。你试过确定它关闭了吗?
if (!cursor.isClosed()){
// do stuff here
}
答案 1 :(得分:0)
我建议试试这个:
if (db == null || !db.isOpen())
db = getReadableDatabase();
确保你不打开它两次
答案 2 :(得分:0)
你应该选择像
这样的东西Cursor c = sqLiteDatabase.query("table1", tableColumns, whereClause, whereArgs,
null, null, orderBy);
此外,请参阅此问题https://stackoverflow.com/a/10601764