Android 获取appmodule内的房间数据库引用
我有一个应用程序,我需要在创建数据库时预先填充数据库,我正在使用匕首柄插入并提供依赖项(房间DAO),当我尝试插入数据时,它会请求电影数据库,但不知道如何在appmodule中获取其引用,提前感谢您的帮助Android 获取appmodule内的房间数据库引用,android,kotlin,dagger-hilt,Android,Kotlin,Dagger Hilt,我有一个应用程序,我需要在创建数据库时预先填充数据库,我正在使用匕首柄插入并提供依赖项(房间DAO),当我尝试插入数据时,它会请求电影数据库,但不知道如何在appmodule中获取其引用,提前感谢您的帮助 这是我的数据库: 提供dao作为依赖项 提供数据库实例 请您在课堂上使用上述代码MoviesDatabase 在这里,我为数据库添加了一个实例变量,它被标记为Volatile 易失性意味着,它不会存储在本地缓存中。关于Volatile的更多信息,您可以浏览很多文章 我已经修改了pr
- 这是我的数据库:
- 提供dao作为依赖项
- 提供数据库实例
MoviesDatabase
实例
变量,它被标记为Volatile
provideDatabase
函数,以便数据库实例存储在变量instance
实例
InsertDatabaseCallback
。在这里,您可以使用数据库实例执行操作providedpopularmoviesdao()。insertPopularMovies(getMovieResultItem())
注意:代码可能显示语法错误或大括号错误,具体取决于您的设置和导入。不要担心,请稍作更改或添加花括号(如果需要),它应该可以正常工作。感谢您的回复,但请记住,我的数据库中没有任何代码,因为我已经用匕首柄创建了数据库实例,这就是为什么我主要面对这个问题,因为我要在appmodule中获取它的实例
// this is my database
@Database(entities = [DataModel::class,MovieResultItem::class], version = 1, exportSchema = false)
abstract class MoviesDatabase : RoomDatabase() {
abstract fun popularDao() : PopularMoviesDao
}
@Singleton
@Provides
fun providePopularMoviesDao(moviesDatabase: MoviesDatabase) : PopularMoviesDao {
return moviesDatabase.popularDao()
}
@Singleton
@Provides
fun provideDatabase(@ApplicationContext context: Context): MoviesDatabase {
return Room.databaseBuilder(context.applicationContext,
MoviesDatabase::class.java, "movie.db")
.addCallback(object : RoomDatabase.Callback(){
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
// here it asks for database instance , not sure how to get it
providePopularMoviesDao().insertPopularMovies(getMovieResultItem())
}
})
.fallbackToDestructiveMigration()
.build()
}
@Database(entities = [DataModel::class,MovieResultItem::class], version = 1, exportSchema = false)
abstract class MoviesDatabase : RoomDatabase() {
abstract fun popularDao(): PopularMoviesDao
@Volatile
private var INSTANCE: MoviesDatabase? = null
@Singleton
@Provides
fun provideDatabase(@ApplicationContext context: Context): MoviesDatabase {
return INSTANCE ?: synchronized(this) {
val databaseInstance = Room.databaseBuilder(
context.applicationContext,
MoviesDatabase::class.java, "movie.db"
)
.fallbackToDestructiveMigration()
.addCallback(InsertDatabaseCallback())
.build()
INSTANCE = databaseInstance
return instance
private class InsertDatabaseCallback() :RoomDatabase.Callback() {
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
INSTANCE?.let {
it.providePopularMoviesDao().insertPopularMovies(getMovieResultItem())
}
}
}
}
}
}