Android数据库 - 尝试重新打开已经关闭的对象?

时间:2014-08-13 07:48:58

标签: android sqliteopenhelper

此外,我的任何设备都没有发生,我收到了很多客户的崩溃报告,如:

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次操作。 实例是一个单例,所以它不应该是问题。

3 个答案:

答案 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