Room数据库配置缺失Required Type Converter致运行崩溃求助
解决Room数据库缺失类型转换器的崩溃问题
问题原因
你的Converters类使用了@ProvidedTypeConverter注解,且构造函数依赖JsonParser,Room无法自动创建该转换器的实例,必须在数据库构建时手动传入实例,否则会触发缺失转换器的报错。
解决步骤
- 在数据库构建时手动传入转换器实例
找到创建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 }
- 确保JsonParser实例可正常获取
如果用依赖注入框架(如Hilt),要保证JsonParser有对应的@Provides方法或带@Inject的构造函数;如果是手动创建,调用getInstance时要传入有效的JsonParser对象。
额外验证
确认Meaning类能被你的JsonParser正常序列化/反序列化(比如用Gson的话,无需额外注解,字段匹配即可)。
内容的提问来源于stack exchange,提问作者SMRUTI SUHANI
相关产品推荐
相关产品推荐

