Задать вопрос

Android Room: как узнать, что миграция произошла?

Я перевожу старый проект на Android Jetpack, в том числе мигрирую старую БД на Room. Я столкнулся со следующей проблемой: в старой схеме хранения данных часть информации находилась в БД, а другая часть в файловой системе в папке Android/data. Было решено перенести эту часть в новую схему Room, используя механизм Migration и скопировать данные из файлов в БД. Но встаёт проблема - я не могу получить Context из Migration, необходимый для доступа к data каталогу с помощью getExternalFilesDir, а также я не могу узнать что Migration завершён и что миграция вообще была, поскольку нет onUpgrade callback. Room позволяет установить callback в трёх случаях - onOpen, onCreate и onDestructiveMigration, но ни один случае не подходит. onCreate вызывается только при первом создании БД и не вызывается после миграции на новую схему. Каков правильный путь в данном случае? Как я могу узнать, что миграция произошла и выполнить дополнительные действия?
  • Вопрос задан
  • 135 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AndroidDev2015
Начал изучать Android/Java
Как то так:
fun databaseBuilder(context: Context): MyAppDatabase {
            return Room.databaseBuilder(
                context.applicationContext,
                MyAppDatabase::class.java,
                "MyApp.db"
            ).addCallback(object : RoomDatabase.Callback() {
                override fun onCreate(db: SupportSQLiteDatabase) {
                    super.onCreate(db)
                    // create code...
                }
            }).addMigrations(
                object : Migration(1, 2) {
                    override fun migrate(database: SupportSQLiteDatabase) {
                        insertFromCVS(context, database) // доступен context
                    }
                }).build()


https://developer.android.com/training/data-storag...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы