【问题标题】:@HiltViewModel annotated class should contain exactly one @Inject annotated constructor@HiltViewModel 注解的类应该包含一个 @Inject 注解的构造函数
【发布时间】:2021-07-03 00:05:47
【问题描述】:

我不断收到此错误:

公共最终类 MainViewModel 扩展 androidx.lifecycle.ViewModel { ^ @HiltViewModel 注解的类应该包含一个 @Inject 注解的构造函数。 [Hilt] 处理未完成。有关详细信息,请参阅上面的错误。

这是我的 MainViewModel:

@HiltViewModel
class MainViewModel @Inject constructor(
    repository: DefaultRepository
) : ViewModel() {
    val items = repository.getItems().asLiveData()
}

【问题讨论】:

  • Run with --stacktrace 尝试获取更多可能有帮助的堆栈跟踪,但您共享的详细信息没有帮助,因为您的 viewmodel 是正确的,可能还有其他一些问题。
  • 这听起来可能很奇怪,但我有一个名为<domain>.<app_name>.data.default 的包名,其中包含DefautRepository。包名中的这个default 导致了这个问题。我重命名了包,现在一切正常。
  • 多么有趣。可能与 Java 关键字冲突!
  • 您是否尝试在视图模型中注入任何变量?在这种情况下,只需删除它们并将它们添加到构造函数中,这应该可以解决您的问题
  • 与@TylerTurnbull 和 Atick Faisal 的问题相同,我在包名中有 new,重命名它解决了问题

标签: android dagger-hilt


【解决方案1】:

在我的例子中,我为我的一些主要构造函数参数指定了默认值。摆脱默认值解决了这个问题。

【讨论】:

    【解决方案2】:

    确保您正在使用此注入注解

    import javax.inject.Inject
    

    而不是这个

    com.google.inject.Inject
    

    【讨论】:

      【解决方案3】:

      确保您的模块中有 @InstallIn(SingletonComponent::class) 而不是 @InstallIn(ApplicationComponentManager::class)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-24
        相关资源
        最近更新 更多