在第一个应用程序上通过RoomDatabase.Callback()onCreate()添加数据时,DataBinding.ObservableArrayList不会更新

时间:2017-11-04 21:09:19

标签: android android-databinding android-room

我一直在Google Developer Advocate上阅读this article关于Room的最佳做法。它提到使用RoomDatabase.Callback()在数据首次创建时向数据库添加数据。

这一切都很好,但是当Activity加载时,数据尚未添加。添加数据后,我的数据绑定不会随新数据一起更新。但是,在重新打开应用程序时,它将拥有数据。这是我遇到的一些竞争条件吗?我正在使用Dagger2,它不包含在示例代码中。

@Volatile private var andiDatabase: AndiDatabase? = null

private fun getInstance(): AndiDatabase =
    andiDatabase ?: synchronized(this) {
        andiDatabase ?: buildDatabase().also { andiDatabase = it }
    }

private fun buildDatabase(): AndiDatabase {
    return Room.databaseBuilder(application.applicationContext, AndiDatabase::class.java,
        "andi-database")
        .addCallback(object : RoomDatabase.Callback() {
            override fun onCreate(db: SupportSQLiteDatabase) {
                super.onCreate(db)
                ioThread {
                    getInstance().andiDAO().insert(*databasePopulator.getAndisList())
                }
            }
        })
        .fallbackToDestructiveMigration()
        .build()
}

@Provides
@Singleton
fun provideAndiDatabase(): AndiDatabase {
    return buildDatabase()
}

我的ViewModel

val andis: LiveData<List<Andi>> = andiDao.getAllAndis()
val andisList: ObservableArrayList<Andi> = ObservableArrayList()

观察是在Activity的{​​{1}}:

中完成的
onCreate()

在调试时,仅观察到空值。

0 个答案:

没有答案