Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取appmodule内的房间数据库引用_Android_Kotlin_Dagger Hilt - Fatal编程技术网

Android 获取appmodule内的房间数据库引用

Android 获取appmodule内的房间数据库引用,android,kotlin,dagger-hilt,Android,Kotlin,Dagger Hilt,我有一个应用程序,我需要在创建数据库时预先填充数据库,我正在使用匕首柄插入并提供依赖项(房间DAO),当我尝试插入数据时,它会请求电影数据库,但不知道如何在appmodule中获取其引用,提前感谢您的帮助 这是我的数据库: 提供dao作为依赖项 提供数据库实例 请您在课堂上使用上述代码MoviesDatabase 在这里,我为数据库添加了一个实例变量,它被标记为Volatile 易失性意味着,它不会存储在本地缓存中。关于Volatile的更多信息,您可以浏览很多文章 我已经修改了pr

我有一个应用程序,我需要在创建数据库时预先填充数据库,我正在使用匕首柄插入并提供依赖项(房间DAO),当我尝试插入数据时,它会请求电影数据库,但不知道如何在appmodule中获取其引用,提前感谢您的帮助

  • 这是我的数据库:
  • 提供dao作为依赖项
  • 提供数据库实例
请您在课堂上使用上述代码
MoviesDatabase

  • 在这里,我为数据库添加了一个
    实例
    变量,它被标记为
    Volatile
  • 易失性意味着,它不会存储在本地缓存中。关于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())
                        }
                    }
                }
            }
        }
    }