Android 匕首2无法解析符号';DaggerAppComponent';

Android 匕首2无法解析符号';DaggerAppComponent';,android,dependency-injection,mvp,dagger-2,Android,Dependency Injection,Mvp,Dagger 2,我正试图创建一个带有改型2、dagger 2和MVP的简单应用程序,但我很难解决依赖性问题,实际上,这是我在尝试重建项目后遇到的错误错误错误:任务执行失败“:app:compiledBugJavaWithJavaC” java.lang.StackOverflower错误 在我提供AppComponent的App类中:无法解析符号“DaggerAppComponent” 我将尝试向您展示我的项目的外观,以便有人能够看到问题,第一个是我的AppModule,其中包括PresentationModu

我正试图创建一个带有改型2、dagger 2和MVP的简单应用程序,但我很难解决依赖性问题,实际上,这是我在尝试重建项目后遇到的错误错误错误:任务执行失败“:app:compiledBugJavaWithJavaC”

java.lang.StackOverflower错误

在我提供AppComponent的App类中:无法解析符号“DaggerAppComponent”

我将尝试向您展示我的项目的外观,以便有人能够看到问题,第一个是我的AppModule,其中包括PresentationModule.class

@Module(includes = PresentationModule.class)
public class AppModule {
    private App app;

    public AppModule(App app) {
        this.app = app;
    }

    @Provides
    @Singleton
    public App provideApp() {
        return app;
    }
}
演示模块如下所示:

@Module(includes = InteractorModule.class)
public class PresentationModule {

    @Provides
    JokePresenter providePresenter(JokeInteractor jokeInteractor) {
        return new JokePresenterImpl(jokeInteractor);
    }
}
和交互模块:

@Module(includes = {NetworkModule.class, PresentationModule.class})
public class InteractorModule {

    @Provides
    JokeInteractor provideJokeInteractor(RetrofitService service, JokePresenter presenter) {
        return new JokeInteractorImpl(service, presenter);
    }
}
这是JokePresenter,它有一个对view和interactor的引用:

public class JokePresenterImpl implements JokePresenter {

    private JokeView mJokeView;
    private List<String> mData = new ArrayList<>();
    private String mJoke;
    private JokeInteractor jokeInteractor;

    public JokePresenterImpl(JokeInteractor jokeInteractor) {
        this.jokeInteractor = jokeInteractor;
    }

    @Override
    public void setView(JokeView view) {
        this.mJokeView = view;
    }

    @Override
    public void getRandomJoke() {
        mJokeView.showProgress();
        jokeInteractor.getRandomJoke();
    }
}
public class JokeInteractorImpl implements JokeInteractor {

    private RetrofitService retrofitService;

    public JokeInteractorImpl(RetrofitService service) {
        this.retrofitService = service;
    }

    @Override
    public Observable getRandomJoke() {
        return retrofitService.getRandomJoke()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());
    }
}

有人能看到这里的问题吗

看看以下各项的实施情况:

@Module(includes = InteractorModule.class)
public class PresentationModule

你有一个循环依赖。你需要重新考虑你的设计。我建议将交互者与演示者分离

一个简单的解决方案:

更改
getRandomJoke()
实现以返回
Observable
并在
Presenter
中订阅它。并从
interactitor
中删除
presenter
引用

交互者:

public class JokePresenterImpl implements JokePresenter {

    private JokeView mJokeView;
    private List<String> mData = new ArrayList<>();
    private String mJoke;
    private JokeInteractor jokeInteractor;

    public JokePresenterImpl(JokeInteractor jokeInteractor) {
        this.jokeInteractor = jokeInteractor;
    }

    @Override
    public void setView(JokeView view) {
        this.mJokeView = view;
    }

    @Override
    public void getRandomJoke() {
        mJokeView.showProgress();
        jokeInteractor.getRandomJoke();
    }
}
public class JokeInteractorImpl implements JokeInteractor {

    private RetrofitService retrofitService;

    public JokeInteractorImpl(RetrofitService service) {
        this.retrofitService = service;
    }

    @Override
    public Observable getRandomJoke() {
        return retrofitService.getRandomJoke()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());
    }
}
演示者:

@Override
public void getRandomJoke() {
    mJokeView.showProgress();
    jokeInteractor.getRandomJoke()
          .subscribe(new Observer<RandomJokeResponse>() {
                @Override
                public void onCompleted() {
                    onRandomJokeCompleted();
                }

                @Override
                public void onError(Throwable e) {
                    onError(e.getMessage());
                }

                @Override
                public void onNext(RandomJokeResponse randomJokeResponse) {
                    onNextRandomJoke(randomJokeResponse);
                }
            });
}
@覆盖
公开作废{
mJokeView.showProgress();
jokeInteractor.getRandomJoke()
.订阅(新观察员){
@凌驾
未完成的公共无效(){
onRandomJokeCompleted();
}
@凌驾
公共无效申报人(可丢弃的e){
onError(如getMessage());
}
@凌驾
public void onNext(randomjokerresponse randomjokerresponse){
onNextRandomJoke(randomJokeResponse);
}
});
}

确保在gradle中添加了依赖项

implementation 'com.google.dagger:dagger-android:2.15'
implementation 'com.google.dagger:dagger-android-support:2.13'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.16'

确保在模块中添加
AndroidSupportInjectionModule::class

像这样:

@Component(
    modules = [
        AndroidSupportInjectionModule::class,
       ....//Other module classes
    ]
)

您是否创建了处理注入的组件接口?如果没有,请告诉我,我很乐意提供一个示例。您应该显示您的gradle依赖项是的,我有一个组件接口,其中包含AppModule,以及演示者被注入的方法void inject(App-App);无效注入(JokeActivity活动);无效注入(持续性活动);无效注入(JokeDialog对话框)@EpicPandaForce我添加了我的依赖项为什么你有
编译'com.google.dagger:dagger:2.7'
编译'com.google.dagger:dagger:2.0'
?这似乎是一个很好的解决方案,它解决了我的问题!泰,干杯!没有注释处理器正是我遇到的问题。非常感谢你,伙计!
@Component(
    modules = [
        AndroidSupportInjectionModule::class,
       ....//Other module classes
    ]
)