匕首2获得自己的Room实例

编程入门 行业动态 更新时间:2024-10-18 16:51:35
本文介绍了匕首2获得自己的Room实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想向会议室数据库添加一个回调以填充初始数据.

I want to add a callback to the room database to populate initial data.

@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以插入数据. 如何运作?

For that i need the database instance in the callback to access DAO for inserting data. How does this work?

我要实现的目标: 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实例都需要另一个实例.

PROBLEM: - The RoomCallback and RoomDatabase instance need both the other instance.

推荐答案

首先设置数据库

@Database( entities = [User::class], version = VERSION_CODE ) abstract class DatabaseManager : RoomDatabase() { abstract fun userDao(): UserDao }

现在创建一个DatabaseModule

Now create a DatabaseModule

@Module class DatabaseModule { @Singleton @Provides fun provideRoomDatabase(@ApplicationContext context: Context): RoomDatabase { return Room.databaseBuilder(context, RoomDatabase::class.java, "dbName") .setJournalMode(JournalMode.TRUNCATE) .build() } }

您可以创建一个单独的模块,也可以在DatabaseModule中添加自己提供的dao对象的方法.举例来说,我有一个UserDao然后

You can create a separate module or add a method in DatabaseModule it self providing dao object. Say for example I have a UserDao then

@Module class UserModule { @Singleton @Provides fun provideDao(database: DatabaseManager): UserDao { return database.userDao() } }

更多推荐

匕首2获得自己的Room实例

本文发布于:2023-10-31 04:31:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1545012.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自己的   匕首   实例   Room

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!