У меня есть проблема с 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, исправил несколько конфликтов, и все, кажется, работает нормально. Но поскольку я не могу воспроизвести эту проблему, я сообщу об этом позже, если это поможет.
Спасибо всем за помощь.