无法弄清楚如何将协程正常工作以将数据插入Room数据库

时间:2020-01-27 06:21:23

标签: android android-room kotlin-coroutines

我没有发现在第一次启动应用程序时将数据插入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"))                        
                }

            }
        }    

    }

}
带有上述代码的

记录不会在应用程序首次启动时插入,但是在重新启动记录时会插入记录,我们如何解决此问题并使其在首次启动时也插入记录?

0 个答案:

没有答案
相关问题