Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-Dagger2-Can';无法将依赖项从应用程序组件获取到活动范围中_Android_Dagger 2_Dagger - Fatal编程技术网

Android-Dagger2-Can';无法将依赖项从应用程序组件获取到活动范围中

Android-Dagger2-Can';无法将依赖项从应用程序组件获取到活动范围中,android,dagger-2,dagger,Android,Dagger 2,Dagger,我使用Dagger 2进行依赖项注入,如果注入在同一范围内,那么一切都正常工作,例如:如果ApplicationComponent在应用范围内注入实例,或者ActivityComponent在活动范围内注入实例,那么一切都正常。然后,当我试图使ActivityComponent依赖于ApplicationComponent并试图从中获取依赖项时,问题就出现了。应用程序根本不构建,并且我得到了3个编译器错误 1.找不到符号类DaggerActivityComponent 2.找不到符号类Dagge

我使用Dagger 2进行依赖项注入,如果注入在同一范围内,那么一切都正常工作,例如:如果ApplicationComponent在应用范围内注入实例,或者ActivityComponent在活动范围内注入实例,那么一切都正常。然后,当我试图使ActivityComponent依赖于ApplicationComponent并试图从中获取依赖项时,问题就出现了。应用程序根本不构建,并且我得到了3个编译器错误 1.找不到符号类DaggerActivityComponent 2.找不到符号类DaggerApplication COM 3.无法访问Nullable。 我到处都在寻找这个,但似乎没有什么能解决问题

以下是ApplicationComponent:

@ApplicationScope
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
void inject(MyApplication application);
}
@ActivityScope
@Component(modules = {ActivityModule.class}, dependencies =   ApplicationComponent.class)
public interface ActivityComponent {

void inject(MainActivity activity);
}
以下是活动组件:

@ApplicationScope
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
void inject(MyApplication application);
}
@ActivityScope
@Component(modules = {ActivityModule.class}, dependencies =   ApplicationComponent.class)
public interface ActivityComponent {

void inject(MainActivity activity);
}
以下是ApplicationModule:

@Module
公共类应用程序模块{

@Provides
public Retrofit retrofit(GsonConverterFactory gsonConverterFactory) {
    return new Retrofit.Builder()
            .baseUrl(BuildConfig.BASE_URL)
            .addConverterFactory(gsonConverterFactory)
            .build();
}

@Provides
public Gson gson() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    return gsonBuilder.create();
}


@Provides
public GsonConverterFactory gsonConverterFactory(Gson gson) {
    return GsonConverterFactory.create(gson);
}
}
这是ActivityModule

@Module
public class ActivityModule {

}
这是应用程序类

public class MyApplication extends Application{

ApplicationComponent component;

@Inject
Retrofit retrofit;

@Override
public void onCreate() {
    super.onCreate();

    component = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule())
            .build();
    component.inject(this);
}

public  ApplicationComponent component() {
    return component;
}
}
最后是活动:

public class MyApplication extends Application{

ApplicationComponent component;

@Inject
Retrofit retrofit;

@Override
public void onCreate() {
    super.onCreate();

    component = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule())
            .build();
    component.inject(this);
}

public  ApplicationComponent component() {
    return component;
}
}

请提供帮助,并感谢您。

我也遇到了同样的问题,您需要做的只是为ApplicationComponent需要在ApplicationComponent接口中注入的依赖项添加一个getter方法

例如,如果您需要改进,比如在这里,您通常在ApplicationModule中定义@Provides方法并添加

Retrofit getRetrofit();
在ApplicationComponent中


我希望这有助于

应用程序不会崩溃,因为我们没有达到这个级别,它甚至无法成功构建。您已经粘贴了两次MyApplication,但没有向我们显示MyActivity。我的直觉是您的“无法访问Nullable”问题是:如果Dagger无法编译MyActivity类,它将无法在DaggerApplicationComponent或DaggerActivityComponent上生成其实现,因此即使Dagger配置正确,您的应用程序也无法工作。如果这还不够,请发布准确的编译器错误消息和MyActivity的文本。下面是示例的一个方面我所经历的,非常感谢你