android - sqlite 更新在 android lollipop 中失败但在 kitkat 上有效?

标签 android sqlite android-5.0-lollipop android-4.4-kitkat

在 kitkat 中,我可以毫无问题地运行这段代码:

mDb = getDatabaseHelper().getWritableDatabase();
        mDb.beginTransactionWithListener(this);
        try {
            count = updateInTransaction(uri, values, selection, selectionArgs);
            if (count > 0) {
                mNotifyChange = true;
            }
            mDb.setTransactionSuccessful();
        } finally {
            mDb.endTransaction();
        }

但是在 Lollipop 上我得到了这个奇怪的错误:

03-11 16:05:33.275    1947-2326/nl.afas.pocket E/SQLiteLog﹕ (11) database corruption at line 57126 of [9491ba7d73]
03-11 16:05:33.275    1947-2326/nl.afas.pocket E/SQLiteLog﹕ (11) statement    aborts at 54: [UPDATE Contact SET favorite=?,_id=? WHERE _id = ?]
03-11 16:05:33.275    1947-2326/nl.afas.pocket E/DefaultDatabaseErrorHandler﹕  Corruption reported by sqlite on database:     /data/data/nl.afas.pocket/databases/pocket.db
03-11 16:05:33.275    1947-2326/nl.afas.pocket E/DefaultDatabaseErrorHandler﹕ deleting the database file: /data/data/nl.afas.pocket/databases/pocket.db
03-11 16:05:33.278    1947-2326/nl.afas.pocket E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-141
Process: nl.afas.pocket, PID: 1947
java.lang.IllegalStateException: attempt to re-open an already-closed    object: SQLiteDatabase: /data/data/nl.afas.pocket/databases/pocket.db
        at   android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
        at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:520)
        at nl.afas.pocket.content.SQLiteContentProvider.update(SQLiteContentProvider.java:144)

第一个错误(数据库损坏)发生在 updateInTransaction

第二个eror非法状态异常发生在mDb.endTransaction(); mDb 那里已经关闭了..

在 KitKat 中,完全相同的数据库不会抛出任何错误。

最佳答案

我在一个有索引的数据库中遇到了同样的问题。

删除索引,问题解决。 (我正在运行 Lollipop 模拟器)。

关于android - sqlite 更新在 android lollipop 中失败但在 kitkat 上有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28991789/

相关文章:

android - 改造和Moshi : parsing variable name objects

android - 自定义 android 样式不允许整数?

Sqlite 缺少 ALTER 支持,Alembic 迁移因此失败。解决方案?

android - 在 Android Lollipop 中膨胀类 android.support.v7.widget.Toolbar 时出错

java - 长文本的文本转语音

android fragment -当另一个 fragment 被推到它上面时如何保存 fragment 中的 View 状态

java - 在 RxJava 中调用 onNext 之间暂停

android - 将值插入 SQLite 数据库

android - 在android中使用.sql文件?

java - 安卓 5.0 IllegalArgumentException : Service Intent must be explicit: on com. google.android.location.internal.GoogleLocationManagerService.START