You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hilt注入对象为空求助:已配置依赖但注入实例仍为Null

Hilt注入对象为Null的解决方案

核心问题分析

你的代码出现注入对象为Null的情况,主要有几个关键原因:

1. Hilt依赖版本不匹配

根build.gradle中Hilt插件版本(2.46.1)与app/build.gradle中hilt-android依赖版本(2.44)不一致,会导致编译生成的注入代码异常。

2. 未调用super.onCreate()

Hilt的依赖注入逻辑是在AppCompatActivity的super.onCreate()中执行的,你直接调用prefs.getTheme()时,注入还未完成,所以prefs为Null。

3. 未确认AppApplication在Manifest中注册

如果AppApplication没有在AndroidManifest.xml中配置为应用的Application类,Hilt的全局组件无法初始化,自然无法完成注入。


具体修复步骤

步骤1:统一Hilt版本

将根build.gradle和app/build.gradle中的Hilt版本保持一致,比如统一升级到2.46.1:

根build.gradle:

dependencies {
    classpath 'com.huawei.agconnect:agcp:1.7.0.300'
    classpath 'com.google.dagger:hilt-android-gradle-plugin:2.46.1'
}

app/build.gradle:

apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.dagger.hilt.android'

dependencies {
 implementation 'com.google.dagger:hilt-android:2.46.1'
 kapt 'com.google.dagger:hilt-compiler:2.46.1'
 implementation 'androidx.hilt:hilt-navigation-compose:1.0.0'
}

注:移除annotationProcessor,因为你用的是Kotlin,只需要保留kapt即可。

步骤2:修改Activity的onCreate方法

必须先调用super.onCreate(bundle),再使用注入的对象:

@AndroidEntryPoint
public abstract class AppStateFragmentActivity extends AppCompatActivity {
    @Inject
    protected Prefs prefs;

    @Override
    public void onCreate(Bundle bundle) {
      super.onCreate(bundle); // 先执行父类的onCreate,完成Hilt注入
      setTheme(prefs.getTheme()); // 此时prefs已初始化
    }
}

步骤3:确认Application类注册

在AndroidManifest.xml中配置AppApplication为应用的Application类:

<application
    android:name=".AppApplication"
    <!-- 其他配置 -->
    >
    <!-- Activity等组件 -->
</application>

额外说明

Hilt不需要手动调用inject(this),只要正确使用@HiltAndroidApp和@AndroidEntryPoint注解,并且版本匹配、调用顺序正确,注入会自动完成。

内容的提问来源于stack exchange,提问作者Slava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:42:50