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 调用.