我正在开发一个 Android 应用程序,使用 Kotlin、Jetpack Compose 和 Hilt 进行依赖注入。尽管遵循了 Hilt 的推荐设置,但在尝试创建 HomeViewModel 实例时,我仍然遇到运行时异常。我已经在 build.gradle 文件和代码中验证了我的 Hilt 设置,但问题仍然存在。
例外:
java.lang.RuntimeException: Cannot create an instance of class tech.diadem.luckydays.composeScreens.viewmodel.HomeViewModel
尽管我似乎正确地设置了用于 Hilt 注入的 ViewModel、存储库和网络服务类,但仍会引发此异常。
HomeViewModel.kt:
@HiltViewModel
class HomeViewModel @Inject constructor(
private val userRepository: UserRepository_
) : ViewModel() {
private val _userName = MutableLiveData<String>()
val userName: LiveData<String> = _userName
fun fetchUserName(authToken: String) {
viewModelScope.launch {
val result = userRepository.getUserName(authToken)
result.onSuccess {
_userName.value = it.first?.userName ?: "Unknown"
}.onFailure {
_userName.value = "Error fetching user"
}
}
}
}
UserRepository_.kt:
class UserRepository_ @Inject constructor(private val networkService: NetworkService) {
suspend fun getUserName(authToken: String): Result<Pair<UserDetails?, Int>> {
return networkService.fetchUserDetails(authToken)
}
}
NetworkService.kt 和 NetworkModule.kt:
interface NetworkService {
suspend fun fetchUserDetails(authToken: String): Result<Pair<UserDetails?, Int>>
}
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Singleton
@Provides
fun provideNetworkService(@ApplicationContext context: Context): NetworkService {
return VolleyNetworkService(context)
}
}
应用类别:
@HiltAndroidApp
class MyLuckyDays_Hilt : Application()
build.gradle(模块): 依赖项包括 Hilt、ViewModel、Kotlin 等(注意:根据您的实际依赖项调整这部分,重点关注 Hilt 和任何可能相关的库)。
我密切关注了 Hilt 文档并多次检查了我的设置,但我无法确定我遗漏了什么或做错了什么导致了上述异常。
问题:
我在 ViewModel 中设置 Hilt 进行依赖注入的方式是否有任何错误?
问题是否在于我如何通过 Hilt 提供 NetworkService,或者在于 UserRepository_ 的设置方式?
我可以采取其他调试步骤来查明注入失败的原因吗?
任何见解或建议将不胜感激!
因为您还没有提到您的 Activity 和 Fragment 的代码。我假设您忘记在 Activity 和 Fragments 类中添加
@AndroidEntryPoint
。
只需用
@AndroidEntryPoint
注释您的 Activity 和 Fragment 类,它就应该可以工作。检查以下链接:
https://developer.android.com/training/dependency-injection/hilt-android#android-classes