我有 Room TypeConverter
,我需要将参数注入(inject)它的构造函数
class RoomConverters(moshi Moshi) {
@TypeConverter
fun fromUserActionLog(data: UserActionLogModel): String {
return moshi.adapter(UserActionLogModel::class.java).toJson(data)
}
@TypeConverter
fun toUserActionLog(json: String): UserActionLogModel {
return moshi.adapter(UserActionLogModel::class.java).fromJson(json)}
}
}
但是当我无法使用构造函数将TypeConverter
注解到数据库对象时;
@Database(entities = [SsidModel::class], version = 1, exportSchema = false)
@TypeConverters(RoomConverters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun ssidDao(): SsidDao
}
有什么办法可以实现吗?
最佳答案
您可以使用 2.3.0-alpha03 版本的构造函数参数创建 Room TypeConverter
发行说明:
Room now has APIs for providing instances of type converters such that the app can control their initialization. To mark a type converter that will be provided to Room use the new annotation @ProvidedTypeConverter
https://developer.android.com/jetpack/androidx/releases/room#2.3.0-alpha03
在您的情况下,您应该将 @ProvidedTypeConverter 添加到 RoomConverter
@ProvidedTypeConverter
class RoomConverters(moshi: Moshi)
在数据库创建时创建转换器并将其传递给数据库构建器:
val roomConverter = RoomConverters(Moshi())
val db = Room.databaseBuilder()
.addTypeConverter(roomConverter)
.build()
您也可以使用 DI 框架,例如 Dagger 2
关于android - 带构造函数的房间类型转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53114573/