房间类型带构造器的转换器 [英] Room TypeConverter with constructer
问题描述
我有Room TypeConverter
,我需要向其构造函数中注入参数
I have Room TypeConverter
and I need to inject parameter to it's constructor
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
注释到数据库对象时;
But when I can not annotate TypeConverter
to database object with contructor;
@Database(entities = [SsidModel::class], version = 1, exportSchema = false)
@TypeConverters(RoomConverters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun ssidDao(): SsidDao
}
有什么办法可以做到这一点?
Is there any way to achieve this?
推荐答案
您可以使用版本 2.3.0-alpha03
发行说明:
Room现在具有用于提供类型转换器实例的API,例如 该应用可以控制其初始化.标记类型转换器 将提供给Room的新注释 @ProvidedTypeConverter
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
In your case you should add @ProvidedTypeConverter to RoomConverter
@ProvidedTypeConverter
class RoomConverters(moshi: Moshi)
在数据库创建时创建转换器,并将其传递给数据库生成器:
Create converter at db creation time and pass it to database builder:
val roomConverter = RoomConverters(Moshi())
val db = Room.databaseBuilder()
.addTypeConverter(roomConverter)
.build()
您还可以使用DI框架,例如匕首2
Also you can use DI framework e.g. Dagger2
这篇关于房间类型带构造器的转换器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!