【发布时间】:2020-01-17 23:07:22
【问题描述】:
我想向房间数据库添加回调以填充初始数据。
@Provides
@Singleton
fun provideRoom(context: Context): MyRoomDatabase {
return Room.databaseBuilder(context, MyRoomDatabase::class.java, "my_database")
.fallbackToDestructiveMigration()
.addCallback(object : RoomDatabase.Callback() {
@Override
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
}
})
.build()
}
为此,我需要回调中的数据库实例来访问 DAO 以插入数据。 这是如何工作的?
编辑:
我想要达到的目标:
Create initial data for the room database at the app installation
我的Callback Class:
class RoomCallback(
var myRoomDatabase : MyRoomDatabase
) : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
myRoomDatabase.basicItemDao().insertList(
listOf(
BasicItem(),
BasicItem()
)
)
}
}
我如何提供RoomDatabase 和RoomCallback:
@Provides
@Singleton
fun provideRoom(context: Context, roomCallback: RoomCallback): MyRoomDatabase {
return Room.databaseBuilder(context, MyRoomDatabase::class.java, "my_database")
.fallbackToDestructiveMigration()
.addCallback(roomCallback)
.build()
}
@Provides
@Singleton
fun provideRoomCallback(myRoomDatabase: MyRoomDatabase): RoomCallback {
return RoomCallback(myRoomDatabase)
}
问题:
- RoomCallback 和 RoomDatabase 实例需要另一个实例。
【问题讨论】:
-
我认为你可以创建一个 Object(Singleton),在你的基础包中扩展 RoomDatabase.Callback(),然后插入,然后在 addCallback() 中传递该对象
-
@Debanjan 我创建了一个
RoomCallback类并实现了 RoomDatabase.Callback()。现在我想为这个RoomCallback类提供匕首,但这个类需要 MyRoomDatabase 类。 MyRoomDatabase 类需要 RoomCallback 类。我该如何解决这个问题? -
@Lingo 我的回答有帮助吗?
-
@Maddy 不抱歉,我知道如何将 Dagger2 与 Room 结合使用。但是在开始时填充数据的部分我遇到了问题。
-
@Lingo 你能用你的问题的更多细节来编辑你的问题吗?
标签: android kotlin android-room dagger-2