集成Hilt提供Retrofit服务时出现‘not a valid name: default’错误
问题分析与解决方案
这个错误Cause: not a valid name: default通常是Hilt处理依赖注入注解时遇到了无效的命名配置,结合你提供的Retrofit和ViewModel相关代码,常见触发场景和修复方式如下:
1. 检查@Provides方法的Qualifier注解
如果你的AppModule中为Retrofit或其服务定义了Qualifier,但注解名称使用了关键字(比如default)或非法字符,就会触发该错误。
错误示例:
@Qualifier @Retention(AnnotationRetention.BINARY) annotation class default // 使用关键字default,属于非法命名
修复方式:
将Qualifier名称改为合法标识符,比如:
@Qualifier @Retention(AnnotationRetention.BINARY) annotation class DefaultRetrofit
之后在@Provides方法和依赖注入处统一使用该Qualifier:
@Provides @DefaultRetrofit fun provideRetrofit(): Retrofit { return Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build() }
2. 检查ViewModel的绑定配置
如果ViewModelModule中使用@Binds/@Provides提供ViewModel时,配置了非法命名的Qualifier,或者默认绑定存在冲突,也会引发错误。
错误示例:
@Module @InstallIn(ViewModelComponent::class) abstract class ViewModelModule { @Binds @default // 同样使用了非法Qualifier名称 abstract fun bindMyViewModel(viewModel: MyViewModel): ViewModel }
修复方式:
确保ViewModel绑定的Qualifier名称合法,若不需要区分多个实例,直接移除Qualifier使用默认绑定:
@Module @InstallIn(ViewModelComponent::class) abstract class ViewModelModule { @Binds abstract fun bindMyViewModel(viewModel: MyViewModel): ViewModel }
同时检查ViewModel构造函数是否正确添加@Inject注解:
class MyViewModel @Inject constructor( private val apiService: ApiService // 确保ApiService注入配置无问题 ) : ViewModel() { // ... }
3. 检查Retrofit服务的注入逻辑
确保AppModule中提供ApiService的方法配置正确,避免重复绑定或命名冲突:
@Provides fun provideApiService(@DefaultRetrofit retrofit: Retrofit): ApiService { return retrofit.create(ApiService::class.java) }
4. 清理重建项目
缓存的构建文件可能导致注解处理器异常,执行以下操作:
- 点击Android Studio的
Build > Clean Project,再点击Build > Rebuild Project - 或使用命令行:
./gradlew clean assembleDebug
内容的提问来源于stack exchange,提问作者Dennis Nguyen
相关产品推荐
相关产品推荐

