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