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

使用Dagger 2依赖注入后对象始终返回null问题求助

Dagger 2注入对象始终为null的排查与解决思路

我尝试使用Dagger 2实现依赖注入,但注入后的对象始终返回null。我认为配置流程无误,但问题仍未解决。以下是相关代码:

Application类

public class ApplicationSA extends Application {
    private static AppComponent appComponent;
    @Override
    public void onCreate() {
        super.onCreate();
        appComponent = DaggerAppComponent.create();
    }
    public static AppComponent getComponent() {
        return appComponent;
    }
}

Component接口

@Component(modules = { SnoreDetectorClass.class, ... })
public interface AppComponent {
    // 此处缺少注入方法声明
}

排查与解决建议

咱们一步步拆解这个问题,Dagger 2注入返回null基本都是几个常见环节没做到位,我给你列几个核心排查点:

  • Component必须声明注入方法
    你贴的Component代码里没看到针对目标类的注入方法,比如要给Activity注入依赖,必须在AppComponent里明确声明:

    void inject(MainActivity activity);
    

    没有这个方法,Dagger不知道要把依赖注入到哪个类中,自然不会生成对应的注入逻辑。

  • 目标类中必须主动调用注入
    比如在你的Activity里,得在合适的生命周期方法(比如onCreate)里触发注入:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ApplicationSA.getComponent().inject(this);
        // 一定要在注入完成后再使用对象,不然会提前拿到null
    }
    

    跳过这一步的话,Dagger根本没机会把实例注入到字段里。

  • Module类的注解不能少
    你Component里引用的SnoreDetectorClass如果是提供依赖的Module,必须加上@Module注解,而且里面提供实例的方法要加@Provides:

    @Module
    public class SnoreDetectorModule {
        @Provides
        SnoreDetector provideSnoreDetector() {
            return new SnoreDetector();
        }
    }
    

    要是这个类不是Module却放在modules参数里,Dagger完全无法识别依赖来源。

  • 注入字段必须加@Inject注解
    目标类里需要被注入的字段,必须标记@Inject:

    public class MainActivity extends AppCompatActivity {
        @Inject
        SnoreDetector snoreDetector; // 没有这个注解,Dagger不知道要注入这个字段
        // ...
    }
    
  • 确认Dagger生成代码正常
    先Rebuild项目,检查是否生成了DaggerAppComponent类。如果生成失败,去Build Output里找错误提示——通常是注解漏加、依赖声明错误这类小问题。

  • Application要在Manifest中注册
    别忘了在AndroidManifest.xml里把ApplicationSA设为Application类,不然它的onCreate不会执行,appComponent本身就是null:

    <application
        android:name=".ApplicationSA"
        <!-- 其他配置 -->
    >
    

你可以从这几个点逐一排查,尤其是注入方法和字段注解这两个最容易忽略的环节,大概率能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:37