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

调用javax.inject.Provider.get()报空对象引用,Hilt注入配置哪里出错?

问题原因及修复方案
  • 拼写错误1:Provider接口名/导入错误
    你代码里声明的注入字段类型是Provide<ConfirmationOverlay>,JSR330标准的懒加载Provider接口正确拼写是Provider(末尾多了个r),同时需要确认导入的是javax.inject.Provider包下的接口,错误的类型或包路径不会被Hilt识别注入,导致字段为null,调用get方法自然抛出空指针。
    修复后代码:
import javax.inject.Provider;

// 类内字段声明
@Inject @MyAnnotation Provider<ConfirmationOverlay> confOverlay;
  • 拼写错误2:Module提供方法注解写错
    你Module里的提供方法用的是@Provide注解,Hilt/Dagger要求的提供实例注解是@Provides(末尾多了个s),需要确认导入的是dagger.Provides或dagger.hilt.Provides包下的注解,错误的注解或包路径会导致Hilt无法识别这个提供方法,对应类型的实例不会被加入依赖图,自然无法完成注入。
    修复后代码:
import dagger.Provides;

@Module
@InstallIn(ActivityComponent.class)
public interface MyModule {
   @Provides
   @MyAnnotation 
   public static ConfirmationOverlay provideConfirmation() {
       return new ConfirmationOverlay();
   }
}
  • 注入宿主未加Hilt入口注解
    你的Module安装在ActivityComponent中,如果你是在Activity里使用这个注入字段,必须在Activity类上添加@AndroidEntryPoint注解;如果是在Fragment里使用,除了Fragment本身加@AndroidEntryPoint,它依附的Activity也必须添加该注解,否则Hilt不会执行注入逻辑,字段保持默认null值。

  • 注入方法调用时机过早
    如果你在Activity的onCreate方法执行之前(比如Activity构造函数、attachBaseContext方法执行阶段)调用了aMethod,此时Hilt的注入流程还没完成,字段还没被赋值,也会触发空指针。需要保证注入字段的调用时机在onCreate之后。

  • 注解依赖错误
    确认你自定义注解MyAnnotation上的@Qualifier是javax.inject.Qualifier包下的注解,而非自己定义的同名注解,否则Hilt不会识别为依赖限定符,无法匹配到对应提供方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:39:04