Вызвано: java .lang.IllegalStateException: попытка повторно открыть уже закрытый объект: SQLiteDatabase - PullRequest
1 голос
/ 29 января 2020

У меня есть проблема с Room, обнаруженная Яндексом Метрика на устройствах с первой установкой с Маркета, поэтому проблема миграции не может быть. Я также проверил его на разных реальных и AVD устройствах и не смог воспроизвести его. Согласно журналам Яндекса, эта проблема может быть воспроизведена на android версиях с 5.0.1 до 9.

Версия комнаты: 1.1.1

Я думаю, что моя проблема похожа на эту один , но там нет правильного ответа.

java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:354)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/user/0/one.sendy.messenger/databases/Socialmessanger_database
        at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1861)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1840)
        at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.query(FrameworkSQLiteDatabase.java:161)
        at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.query(FrameworkSQLiteDatabase.java:150)
        at android.arch.persistence.room.RoomOpenHelper.hasRoomMasterTable(RoomOpenHelper.java:151)
        at android.arch.persistence.room.RoomOpenHelper.checkIdentity(RoomOpenHelper.java:123)
        at android.arch.persistence.room.RoomOpenHelper.onOpen(RoomOpenHelper.java:115)
        at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onOpen(FrameworkSQLiteOpenHelper.java:151)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:411)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:298)
        at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:96)
        at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
        at android.arch.persistence.room.RoomDatabase.compileStatement(RoomDatabase.java:244)
        at android.arch.persistence.room.SharedSQLiteStatement.createNewStatement(SharedSQLiteStatement.java:65)
        at android.arch.persistence.room.SharedSQLiteStatement.getStmt(SharedSQLiteStatement.java:72)
        at android.arch.persistence.room.SharedSQLiteStatement.acquire(SharedSQLiteStatement.java:87)
        at com.social.soc.repository.repositorycore.daos.ChatMessageDao_Impl.deleteAll(ChatMessageDao_Impl.java:697)
        at com.social.soc.repository.repositorycore.Repository.clearDatabaseSync(Repository.java:680)
        at com.social.soc.repository.repositorycore.Repository.lambda$deleteAllData$37$Repository(Repository.java:669)
        at com.social.soc.repository.repositorycore.-$$Lambda$Repository$Wk_rZJ-sdwid6vlvxvXj1SzYXr8.run(Unknown Source)
        at beta.framework.android.util.async.AsyncWorker$AsyncTaskExec.doInBackground(AsyncWorker.java:51)
        at beta.framework.android.util.async.AsyncWorker$AsyncTaskExec.doInBackground(AsyncWorker.java:39)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        ... 3 more

Вот что я делаю с БД:

chatMessageDao.deleteAll();

И в Дао:

 @Query("DELETE FROM chatmessage")
    void deleteAll();

Это не проблема миграции, потому что: 1) это первая установка; 2) воспроизведено на 5% устройств; 3) и если это была проблема с миграциями, она обычно говорит, что она «ожидала» и что «нашла».

Также я обнаружила эту проблему на GitHub, которая приводит меня к этому один . Похоже, эта проблема действительно существовала, но они исправили ее в комнате 2.1.0. Но мой выпускник говорит, что последняя версия 1.1.1. А также я пользуюсь поддержкой libs, а не androidx.

Обновление:

Я перенес проект на androidx, исправил несколько конфликтов, и все, кажется, работает нормально. Но поскольку я не могу воспроизвести эту проблему, я сообщу об этом позже, если это поможет.

Спасибо всем за помощь.

1 Ответ

0 голосов
/ 29 января 2020

Эта проблема была решена в более поздней версии Room. Нет смысла пытаться решить эту проблему в той версии, которую вы сейчас используете. Пожалуйста, обновите, потому что используемой вами версии почти 2 года

Проверьте эту ссылку, чтобы увидеть, какая версия самая последняя: https://developer.android.com/jetpack/androidx/releases/room

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...