Hilt :- 无法在 AppCompatActivity 中使用 @AndroidEntryPoint 获取 DefaultViewModelFactories 异常?

Posted

技术标签:

【中文标题】Hilt :- 无法在 AppCompatActivity 中使用 @AndroidEntryPoint 获取 DefaultViewModelFactories 异常?【英文标题】:Hilt :- Not able to use the @AndroidEntryPoint in the AppCompatActivity getting DefaultV iewModelFactories exceptions? 【发布时间】:2021-08-18 00:41:23 【问题描述】:

我想在我的项目中使用 Hilt 来获取辅助类对象作为我活动的通用对象。我已经尝试了下面的代码行

清单文件条目

 <application
        android:name=".application.AppController"
        android:allowBackup="false"
   

我的 AppController

@HiltAndroidApp
public class AppController extends Application implements Configuration.Provider 

请检查我的 gradles 文件

implementation "androidx.activity:activity-ktx:1.2.3"

implementation 'androidx.fragment:fragment-ktx:1.3.4'
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
implementation 'com.google.dagger:hilt-android:2.36'
kapt 'androidx.hilt:hilt-compiler:1.0.0'
kapt 'com.google.dagger:hilt-android-compiler:2.31.2-alpha'

请检查下面我的 classPath 条目

classpath "com.google.dagger:hilt-android-gradle-plugin:2.36"

现在请检查我使用 Hilt 的 NVModule 模块

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
class NVModule 

    @Provides
    fun provideDeviceDiagnosticHelper(): DeviceDiagnosticHelper
        return DeviceDiagnosticHelper()
    

现在请检查我在其中注入 Hilt 对象的 Activity

@AndroidEntryPoint
public class AutomaticTestActivity extends AppCompatActivity 


  private AutomaticTestPresenter automaticTestPresenter;

  private AutomaticTestView automaticTestView;

  
  ActivityDeviceDiagnosticBinding mBinding;

  @Inject
  DeviceDiagnosticHelper deviceDiagnosticHelper;

但我在运行应用程序时遇到以下异常,请检查一次

例外:-

/home/..../com/my/app/activity/Hilt_AutomaticTestActivity.java:70:错误:类 DefaultViewModelFactories 中的方法 getActivityFactory 不能应用于给定类型; 返回 DefaultViewModelFactories.getActivityFactory(this); ^ 必需:组件活动,工厂 找到: Hilt_AutomaticTestActivity 原因:实际参数列表和形式参数列表的长度不同

请帮我解决这个问题

【问题讨论】:

什么是DeviceDiagnosticHelper?它是视图模型吗? @MayurGajra 这是我的助手类,它执行计算、获取静态列表等操作 我检查了您的示例代码,它与 Injecting DeviceDiagnosticHelper 一起工作正常。您的代码中是否有 viewmodel 声明?从例外来看,它似乎与此有关。如果是,那么您能否发布与此相关的代码? 实际上,我正在使用 MVP 架构,但是我在类 Activity 中遇到异常,即AutomaticTestActivity,它甚至不适用于 Simple 类,请检查一下一次,您需要哪个代码,请告诉我,也会在那里发布相关代码..请检查注释,我使用的是否正确..谢谢 奇怪的是,您根本没有使用viewmodel 并且仍然收到DefaultViewModelFactories 错误。如果您的代码中没有实现viewmodel,那么我想这一定是一些代码生成错误。尝试删除build & Invalidate cache &amp; Restart 【参考方案1】:

似乎是版本不匹配。使用以下版本:

// hilt
implementation 'com.google.dagger:hilt-android:2.36'
kapt 'com.google.dagger:hilt-android-compiler:2.36'
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.36'
kaptTest 'com.google.dagger:hilt-android-compiler:2.36'
// implementation "androidx.hilt:hilt-navigation:1.0.0"
// implementation "androidx.hilt:hilt-navigation-fragment:1.0.0"
kapt 'androidx.hilt:hilt-compiler:1.0.0'

apply plugin: 'dagger.hilt.android.plugin'

classpath 'com.google.dagger:hilt-android-gradle-plugin:2.36'

【讨论】:

【参考方案2】:

项目级别和应用级别的依赖版本必须相同。 喜欢 : 类路径“com.google.dagger:hilt-android-gradle-plugin:2.38.1”

实现“com.google.dagger:hilt-android:2.38.1” kapt "com.google.dagger:hilt-android-compiler:2.38.1"

【讨论】:

【参考方案3】:
implementation "com.google.dagger:hilt-android:2.38.1"
kapt "com.google.dagger:hilt-android-compiler:2.38.1"


implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03'
    kapt 'androidx.hilt:hilt-compiler:1.0.0'

为我工作

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Hilt :- 无法在 AppCompatActivity 中使用 @AndroidEntryPoint 获取 DefaultViewModelFactories 异常?的主要内容,如果未能解决你的问题,请参考以下文章

无法应用插件“dagger.hilt.android.plugin”

Jetpack Compose 和 Hilt 冲突

安卓||在 Hilt 不支持的类中注入依赖项,例如 Helper 类

未解决的参考@HiltAndroidApp 或 Android 中的任何其他 Hilt 注释

Hilt 扩展 | MAD Skills

Hilt 工作原理 | MAD Skills