我没有发现在第一次启动应用程序时将数据插入Room Database
的问题,但是在重新启动应用程序时插入了数据。为什么在首次启动时不插入?
我的代码是:
@Dao
interface FooDAO {
@Insert
suspend fun save(foo: Foo)
}
和数据库类一样简单:
@Database(entities = [Foo::class], version = 1, exportSchema = false)
abstract class FooDatabase: RoomDatabase() {
// get dao
abstract fun getFooDao(): FooDAO
companion object{
@Volatile private var INSTANCE: FooDatabase? = null
fun getDatabase(context: Context): FooDatabase {
if (INSTANCE == null) {
synchronized(this) {
INSTANCE = Room.databaseBuilder(
context.applicationContext,
FooDatabase::class.java,
"my_db.db"
).fallbackToDestructiveMigration()
.addCallback(CALLBACK)
.build()
}
}
return INSTANCE!!
}
private val CALLBACK = object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
val fooDAO = INSTANCE!!.getFooDao()
CoroutineScope(Dispatchers.IO).launch {
fooDAO.save(Foo(1, "A"))
fooDAO.save(Foo(2, "B"))
fooDAO.save(Foo(3, "C"))
fooDAO.save(Foo(4, "D"))
fooDAO.save(Foo(5, "E"))
}
}
}
}
}
带有上述代码的记录不会在应用程序首次启动时插入,但是在重新启动记录时会插入记录,我们如何解决此问题并使其在首次启动时也插入记录?