有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Dagger 2无法初始化

当我编译我的Android项目时,我发现了这样的错误:

错误:(15,13)错误:安卓。所容纳之物如果没有@Provides注释的方法,则无法提供上下文。 安卓所容纳之物上下文在com上提供。。。。。。迪。组件。应用组件。getContext()

我的组件:

@Singleton
@Component(modules = {AppModule.class})
public interface AppComponent {
    Context getContext();
    DataManager getDataManager();
}

我的模块:

@Module
public class AppModule {
    protected final Application mApplication;

    public AppModule(Application application) {
        mApplication = application;
    }

    @Provides
    @Singleton
    Application provideApplication() {
        return mApplication;
    }

    @Provides
    @ApplicationContext
    @Singleton
    Context provideContext() {
        return mApplication;
    }

    @Provides
    @Singleton
    DataManager provideDataManager() {
        return new DataManager();
    }
}

共 (1) 个答案

  1. # 1 楼答案

    您的组件表示它可以提供Context

    @Singleton
    @Component(modules = {AppModule.class})
    interface AppComponent {
      Context getContext();
    }
    

    当它只知道一个@ApplicationContext Context(注意限定符?):

    @Module
    class AppModule {
    
      @Provides
      @Singleton
      @ApplicationContext
      Context provideContext() {
        return mApplication;
      }
    }
    

    您可以删除@ApplicationContext限定符,只从模块中提供一个Context,如果您试图同时提供活动上下文,这可能会造成阻碍,或者保留限定符并实际提供限定的上下文:

    @Singleton
    @Component(modules = {AppModule.class})
    interface AppComponent {
      @ApplicationContext
      Context getContext();
    }
    

    如果试图使用/注入应用程序上下文,还需要使用限定符:

    @ApplicationContext @Inject Context mContext;