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
相关产品推荐
相关产品推荐

