Android room迁移添加枚举列表

Alg*_*gar 6 android android-room android-architecture-components

我正在储蓄

data class Settings(
    val foo: Int
)
Run Code Online (Sandbox Code Playgroud)

进入我的房间数据库版本1。

现在我需要扩展Settings

data class Settings(
    val foo: Int,
    val bar: ArrayList<Baz>
)
Run Code Online (Sandbox Code Playgroud)

在哪里

enum class Baz {
    A, B, C
}
Run Code Online (Sandbox Code Playgroud)

所以我需要迁移到版本 2。

我有 的类型转换器bar。我目前正在尝试类似的事情

val MIGRATION_1_2: Migration = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE settings ADD COLUMN bar TEXT")
    }
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个IllegalStateException: Migration didn't properly handle Settings...错误。

我被困住了。所以请帮忙!我如何让迁移工作?

小智 0

尝试更改设置表名称设置,并且您仅通过设置..

    database.execSQL("ALTER TABLE Settings ADD COLUMN bar TEXT")
Run Code Online (Sandbox Code Playgroud)

添加后..

database =  Room.databaseBuilder(context.getApplicationContext(),
    UsersDatabase.class, "Sample.db")
    .addMigrations(MIGRATION_1_2)
    .build();
Run Code Online (Sandbox Code Playgroud)

如果仅添加新表,请参考此.. 房间数据库迁移