Исключение времени выполнения из комнаты в проекте, который не использует комнату

Я внезапно начал получать это исключение времени выполнения при запуске приложения, не имея места в качестве моей зависимости.

07-20 19:48:37.703 18737-18771/mypackage.x E/AndroidRuntime: FATAL EXCEPTION: pool-4-thread-1
    Process: mypackage, PID: 18737
    java.lang.IllegalStateException: A migration from 3 to 2 was required but not found. Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.
        at android.arch.persistence.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:97)
        at android.arch.persistence.room.RoomOpenHelper.onDowngrade(RoomOpenHelper.java:109)
        at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onDowngrade(FrameworkSQLiteOpenHelper.java:144)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:396)
        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 androidx.work.impl.model.WorkSpecDao_Impl.resetScheduledState(WorkSpecDao_Impl.java:337)
        at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(WorkManagerImpl.java:514)
        at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:73)
        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)

вот некоторые из зависимостей, которые у меня есть от Android arch:

implementation "androidx.core:core-ktx:$ktx_version"
implementation "android.arch.paging:runtime:$paging_runtime"
implementation("android.arch.lifecycle:extensions:$android_arc_version") {
    force = true
}

implementation "android.arch.navigation:navigation-fragment-ktx:$navigation_version"
// use -ktx for Kotlin
implementation "android.arch.navigation:navigation-ui-ktx:$navigation_version"
implementation "android.arch.work:work-runtime-ktx:$work_version"

Любая идея, что могло вызвать это?


person Kayvan N    schedule 21.07.2018    source источник


Ответы (1)


Оказывается, у android.arch.work:work была зависимость от библиотеки комнаты, и я использовал версию 1.0.0-alpha03 рабочей библиотеки. Я думал об исключении зависимости, но заметил, что для рабочего компонента доступно обновление, и после попытки это устранило проблему. Поэтому обновите свою рабочую библиотеку, чтобы решить эту проблему (на данный момент обновленная версия — 1.0.0-alpha04).

person Kayvan N    schedule 21.07.2018
comment
Ваш ответ предназначен, чтобы заработать больше скорости. Я пришел сюда из исключения Room, и миграция не имеет ничего общего с версией библиотеки. - person CoolMind; 21.08.2018
comment
@CoolMind В заголовке вопроса, который я упомянул в проекте, который не использует комнату, вы находитесь не в том месте, если используете комнату. - person Kayvan N; 21.08.2018
comment
Да согласен. Странно, что это исключение появилось в приложении без Room. Кстати, я написал скрипты миграции и решил проблему. - person CoolMind; 21.08.2018
comment
@CoolMind У меня такая же проблема, как и у вас. Тест переноса базы данных комнаты выдает эту ошибку. Не могли бы вы помочь мне в этом? Заранее спасибо. - person shakunthalaMK; 25.01.2019
comment
@CoolMind У меня возникла следующая ошибка. На самом деле я занимаюсь модульным тестированием миграции базы данных Room. jError: java.lang.IllegalStateException: требуется миграция с 13 на 11, но она не найдена. Укажите необходимый путь миграции с помощью RoomDatabase.Builder.addMigration(Migration ...) или разрешите деструктивную миграцию с помощью одного из методов RoomDatabase.Builder.fallbackToDestructiveMigration*. - person shakunthalaMK; 25.01.2019
comment
@shakunthalaMK, значит ли это, что Room работал правильно, миграции выполнялись с 1 по 13 версии БД, но после запуска тестов они не удались? Вы не обновляли приложение? Написал миграции: в AppDatabase добавил val migrations = DbMigrations(context), instance = Room.databaseBuilder(context.applicationContext, AppDatabase::class.java, DATABASE_NAME).addMigrations(migrations.migration_1_2).build(), так же в migrations.xml написал скрипты. Я обновился с 1 на 2. - person CoolMind; 25.01.2019
comment
См. также stackoverflow.com/questions/48179598/. Возможно, вы заменили БД. Либо для эксперимента напишите миграцию с 13 на 11. Либо ваш апк содержит БД 13, но в тесте вы пытаетесь обновиться с 10 на 11 (не знаю где это возможно). - person CoolMind; 25.01.2019
comment
@CoolMind Проверю. Спасибо за вашу помощь. - person shakunthalaMK; 28.01.2019
comment
@shakunthalaMK, добро пожаловать. Будем рады услышать вас снова. - person CoolMind; 28.01.2019