房间类型带构造器的转换器 [英] Room TypeConverter with constructer

查看:68
本文介绍了房间类型带构造器的转换器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆