【问题标题】:Add room DB migration only for Debug build仅为调试构建添加房间数据库迁移
【发布时间】:2021-09-02 21:50:02
【问题描述】:

我创建数据库的功能是这样的:

    operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
        instance ?: buildDatabase(context).also { instance = it }
    }

并建立数据库:

private fun buildDatabase(context: Context) = Room.databaseBuilder(context, 
AppDatabase::class.java, "Rides.db")
        .addMigrations(MIGRATION_1_2)
        .addMigrations(MIGRATION_2_3)
        .build()

我需要的是 MIGRATION_2_3 只会在调试模式下发生,像这样(伪):

 private fun buildDatabase(context: Context) = Room.databaseBuilder(context, 
 AppDatabase::class.java, "Rides.db")
        .addMigrations(MIGRATION_1_2)
    if (BuildConfig.Debug)
    {
        .addMigrations(MIGRATION_2_3)
    }
       
        .build()
}

在不创建两个 buildDatabase 函数的情况下实现此目的的正确语法是什么?

【问题讨论】:

    标签: android android-room database-migration


    【解决方案1】:

    你已经提到了它的伪代码。您可以获取构建器并添加条件,然后返回builder.build()。

    private fun buildDatabase(context: Context):AppDatabase {
            val builder = Room.databaseBuilder(
                context,
                AppDatabase::class.java, "Rides.db"
            )
                .addMigrations(MIGRATION_1_2)
            if (BuildConfig.DEBUG) {
                builder.addMigrations(MIGRATION_2_3)
            }
            return builder.build()
        }
    

    或

    private fun buildDatabase(context: Context): AppDatabase =
            Room.databaseBuilder(
                context,
                AppDatabase::class.java, "Rides.db"
            ).apply {
                addMigrations(MIGRATION_1_2)
                if (BuildConfig.DEBUG) {
                    addMigrations(MIGRATION_2_3)
                }
            }.build()
    

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 2019-02-13
      • 1970-01-01
      • 2021-08-13
      • 2018-12-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多