You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Room数据库配置缺失Required Type Converter致运行崩溃求助

解决Room数据库缺失类型转换器的崩溃问题

问题原因

你的Converters类使用了@ProvidedTypeConverter注解,且构造函数依赖JsonParser,Room无法自动创建该转换器的实例,必须在数据库构建时手动传入实例,否则会触发缺失转换器的报错。

解决步骤

  1. 在数据库构建时手动传入转换器实例
    找到创建WordInfoDatabase实例的代码(依赖注入Provider类或单例逻辑),在Room.databaseBuilder链中添加.addTypeConverter()方法,传入Converters的实例:
// 示例:Hilt依赖注入场景
@Singleton
@Provides
fun provideWordInfoDatabase(
    @ApplicationContext context: Context,
    jsonParser: JsonParser
): WordInfoDatabase {
    return Room.databaseBuilder(
        context,
        WordInfoDatabase::class.java,
        "word_info_db"
    )
        .addTypeConverter(Converters(jsonParser)) // 关键步骤:手动传入转换器实例
        .build()
}

如果是普通单例模式:

class WordInfoDatabase private constructor(context: Context, jsonParser: JsonParser) : RoomDatabase() {
    companion object {
        @Volatile
        private var INSTANCE: WordInfoDatabase? = null

        fun getInstance(context: Context, jsonParser: JsonParser): WordInfoDatabase {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    WordInfoDatabase::class.java,
                    "word_info_db"
                )
                    .addTypeConverter(Converters(jsonParser))
                    .build()
                INSTANCE = instance
                instance
            }
        }
    }

    abstract val dao: WordInfoDao
}
  1. 确保JsonParser实例可正常获取
    如果用依赖注入框架(如Hilt),要保证JsonParser有对应的@Provides方法或带@Inject的构造函数;如果是手动创建,调用getInstance时要传入有效的JsonParser对象。

额外验证

确认Meaning类能被你的JsonParser正常序列化/反序列化(比如用Gson的话,无需额外注解,字段匹配即可)。

内容的提问来源于stack exchange,提问作者SMRUTI SUHANI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:25:10