gpt4 book ai didi

android - 如何使用 Hilt 在 Room TypeConvertors 中注入(inject) Moshi/Gson?

转载 作者:行者123 更新时间:2023-12-03 23:44:57 27 4
gpt4 key购买 nike

我正在尝试刀柄,我想注入(inject) moshi 进行序列化和反序列化。
这是一个代码sample来自不使用 di 的 github Repo:

open class InfoTypeConverter {

private val moshi = Moshi.Builder().build() //not using dependency injection

@TypeConverter
fun fromString(value: String): PokemonInfo.Type? {
val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
return adapter.fromJson(value)
}

@TypeConverter
fun fromInfoType(type: PokemonInfo.Type): String {
val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
return adapter.toJson(type)
}
}
我正在尝试用@AndroidEntryPoint/@EntryPoint 尝试随机的东西来现场注入(inject)这样的注释,显然它不起作用。

最佳答案

其中Moshi在 Hilt 依赖图中就像添加这个类一样简单:

@Module
@InstallIn(ApplicationComponent::class)
object DataModule {

@Singleton
@Provides
fun provideMoshi(): Moshi {
return Moshi.Builder().build()
}
}
@TypeConverters用于 Room数据库。如果您想为他们使用 Hilt 的 Moshi,您将不得不尝试一下。一种方法是:
  • @TypeConverter带有初始化器的静态上下文(object 声明)中的函数
  • object InfoTypeConverter {

    private lateinit var moshi: Moshi

    fun initialize(moshi: Moshi){
    this.moshi = moshi
    }


    @TypeConverter
    fun fromString(value: String): PokemonInfo.Type? {
    val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
    return adapter.fromJson(value)
    }

    @TypeConverter
    fun fromInfoType(type: PokemonInfo.Type): String {
    val adapter: JsonAdapter<PokemonInfo.Type> = moshi.adapter(PokemonInfo.Type::class.java)
    return adapter.toJson(type)
    }
    }
  • 初始化 InfoTypeConverter在创建您的 RoomDatabase 之前(此处使用相同的模块):
  • @Module
    @InstallIn(ApplicationComponent::class)
    object DataModule {

    @Singleton
    @Provides
    fun provideMoshi(): Moshi {
    return Moshi.Builder().build()
    }

    @Singleton
    @Provides
    fun provideRoomDatabase(moshi: Moshi): YourDatabase {
    InfoTypeConverter.initialize(moshi)
    val yourDatabase: YourDatabase = /* create your room database here */
    return yourDatabase
    }
    }

    关于android - 如何使用 Hilt 在 Room TypeConvertors 中注入(inject) Moshi/Gson?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63411953/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com