Kotlin 中带有 Dagger 的房间类型转换器
Room TypeConverter with Dagger in kotlin
有谁知道使用 dagger2 将类型转换器添加到房间数据库的方法吗?我的应用程序抛出一个错误,指出数据库配置中缺少类型转换器。这是我的代码:
数据库模块
@Module
object DatabaseModule {
@Singleton
@Provides
fun provideDatabase(applicationContext: MobileApplication): LocalRoomDatabase =
Room.databaseBuilder(applicationContext, LocalRoomDatabase::class.java, "local_database")
.addTypeConverter(DateTimeConverter::class)
.fallbackToDestructiveMigration()
.build()
@Singleton
@Provides
fun provideRoomDao(database: LocalRoomDatabase) = database.roomDao()
}
LocalRoomDatabase
@Database(entities = arrayOf(IND1::class, STT4::class, UNT1::class, USR1::class, WHS1::class), version = 2)
@TypeConverters(DateTimeConverter::class )
abstract class LocalRoomDatabase : RoomDatabase() {
abstract fun roomDao(): RoomDao
}
日期时间转换器
@ProvidedTypeConverter
class DateTimeConverter {
@TypeConverter
fun toDate(dateString: String): LocalDateTime? {
return if (dateString == null) {
null
} else {
LocalDateTime.parse(dateString)
}
}
@TypeConverter
fun toDateString(date: LocalDateTime): String? {
return if (date == null) null else date.toString()
}
}
如何使用 dagger2 正确注入类型转换器?
使用 addTypeConverter
添加类型转换器时,您需要提供转换器的 实例 ,而不是 class 引用。所以你应该这样做:
addTypeConverter(DateTimeConverter())
但是这里看起来你不需要首先注入你的类型转换器,如果没有必要你可以去掉 ProvidedTypeConverter
注释和 addTypeConverter
调用.
有谁知道使用 dagger2 将类型转换器添加到房间数据库的方法吗?我的应用程序抛出一个错误,指出数据库配置中缺少类型转换器。这是我的代码:
数据库模块
@Module
object DatabaseModule {
@Singleton
@Provides
fun provideDatabase(applicationContext: MobileApplication): LocalRoomDatabase =
Room.databaseBuilder(applicationContext, LocalRoomDatabase::class.java, "local_database")
.addTypeConverter(DateTimeConverter::class)
.fallbackToDestructiveMigration()
.build()
@Singleton
@Provides
fun provideRoomDao(database: LocalRoomDatabase) = database.roomDao()
}
LocalRoomDatabase
@Database(entities = arrayOf(IND1::class, STT4::class, UNT1::class, USR1::class, WHS1::class), version = 2)
@TypeConverters(DateTimeConverter::class )
abstract class LocalRoomDatabase : RoomDatabase() {
abstract fun roomDao(): RoomDao
}
日期时间转换器
@ProvidedTypeConverter
class DateTimeConverter {
@TypeConverter
fun toDate(dateString: String): LocalDateTime? {
return if (dateString == null) {
null
} else {
LocalDateTime.parse(dateString)
}
}
@TypeConverter
fun toDateString(date: LocalDateTime): String? {
return if (date == null) null else date.toString()
}
}
如何使用 dagger2 正确注入类型转换器?
使用 addTypeConverter
添加类型转换器时,您需要提供转换器的 实例 ,而不是 class 引用。所以你应该这样做:
addTypeConverter(DateTimeConverter())
但是这里看起来你不需要首先注入你的类型转换器,如果没有必要你可以去掉 ProvidedTypeConverter
注释和 addTypeConverter
调用.