版本更新后房间数据库回调不起作用

Room Database callback not working after version update

我正在构建一个使用 Room 库 db 的应用程序,我 运行 遇到了一个小问题。在我创建数据库的第一个版本中,我包含了一个回调来填充我的数据库,这样我就不会从一个空数据库开始:

 @Provides
@Singleton
fun provideDatabase(app: Application , callback : MyDatabase.Callback) =
    Room.databaseBuilder(app , MyDatabase::class.java, "home_database")
        .fallbackToDestructiveMigration()
        .addCallback(callback)
        .build()

在第一个版本中,它运行良好,然后到了我不得不向数据库中添加另一个 table 的地步。这意味着模式发生了变化,现在我不得不将数据库版本号从 1 更改为 2。在我更改版本号然后 运行 应用程序之后,我的回调似乎不再起作用,数据库开始关闭空的。我最初认为 fallbackToDestructiveMigration() 会防止数据库丢失其数据,并且它会在回调工作时重新创建自己。关于如何让回调恢复正常工作的任何线索?

数据库代码:

@Database(entities = [User::class , Result::class] , version = 2)
abstract class MyDatabase : RoomDatabase() {
    abstract fun dbDao() : Dao
    class Callback @Inject constructor(
        private val database : Provider<MyDatabase>,
        @ApplicationScope private val applicationScope: CoroutineScope
    ) : RoomDatabase.Callback(){

        override fun onCreate(db: SupportSQLiteDatabase) {
            super.onCreate(db)

            val dao = database.get().dbDao()

            applicationScope.launch {
                dao.addUser(
                    User(1 , "Larry" , "Android Developer","Boston" )
                )
                dao.addUser(
                    User(2 , "Garry" , "Javascript Developer","Casablanca" )
                )
           
            }
        }

    }

}

DestructiveMigration 上未调用 onCreate()。您需要将 onDestructiveMigration 添加到您的回调中,就像 onCreate:

override fun onDestructiveMigration(db: SupportSQLiteDatabase) {
    super.onDestructiveMigration(db)
    // Add your data
}

参见:https://developer.android.com/reference/androidx/room/RoomDatabase.Callback#onDestructiveMigration(androidx.sqlite.db.SupportSQLiteDatabase)