带构造函数的 Room TypeConverter

2024-04-01

我有房间TypeConverter我需要将参数注入到它的构造函数中

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
}

有什么办法可以实现这一点吗?


您可以使用版本中的构造函数参数创建 Room TypeConverter2.3.0-alpha03

发行说明:

Room 现在具有用于提供类型转换器实例的 API,以便 应用程序可以控制它们的初始化。标记类型转换器 将提供给 Room 使用新注释 @ProvidedTypeConverter

https://developer.android.com/jetpack/androidx/releases/room#2.3.0-alpha03 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 框架,例如匕首2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带构造函数的 Room TypeConverter 的相关文章