Dagger 2 无法解析符号 'DaggerAppComponent'
Dagger 2 can not resolve symbol 'DaggerAppComponent'
我正在尝试使用 retrofit 2、dagger 2 和 MVP 创建一个简单的应用程序,但我在与依赖项作斗争,实际上,这是我在尝试重建项目后遇到的错误 Error:Execution 失败对于任务“:app:compileDebugJavaWithJavac”。
java.lang.WhosebugError
以及在我提供 AppComponent 的 App class 中:无法解析符号 '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:
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();
}
}
以及具有 RetrofitService 和 JokePresenter 引用的 JokeInteractor:
public class JokeInteractorImpl implements JokeInteractor {
private RetrofitService retrofitService;
private JokePresenter presenter;
public JokeInteractorImpl(RetrofitService service, JokePresenter presenter) {
this.retrofitService = service;
this.presenter = presenter;
}
@Override
public void getRandomJoke() {
retrofitService.getRandomJoke()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RandomJokeResponse>() {
@Override
public void onCompleted() {
presenter.onRandomJokeCompleted();
}
@Override
public void onError(Throwable e) {
presenter.onError(e.getMessage());
}
@Override
public void onNext(RandomJokeResponse randomJokeResponse) {
presenter.onNextRandomJoke(randomJokeResponse);
}
});
}
Gradle 依赖关系:
apt 'com.google.dagger:dagger-compiler:2.7'
compile 'com.google.dagger:dagger:2.7'
provided 'javax.annotation:jsr250-api:1.0'
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
//rx java
compile 'io.reactivex:rxjava:1.1.6'
compile 'io.reactivex:rxandroid:1.2.1'
//dagger2
compile 'com.google.dagger:dagger:2.0'
provided 'org.glassfish:javax.annotation:10.0-b28'
有人能看出这里的问题吗?
查看执行情况:
@Module(includes = InteractorModule.class)
public class PresentationModule
和
@Module(includes = {NetworkModule.class, PresentationModule.class})
public class InteractorModule
你有循环依赖。您需要重新考虑您的设计。我建议将 Interactor
与 Presenter
解耦。
一个简单的解决方案:
将 getRandomJoke()
实现更改为 return Observable
并在 Presenter
内订阅它。并从 Interactor
.
中删除 presenter
引用
互动者:
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);
}
});
}
确保在您的 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
]
)
我正在尝试使用 retrofit 2、dagger 2 和 MVP 创建一个简单的应用程序,但我在与依赖项作斗争,实际上,这是我在尝试重建项目后遇到的错误 Error:Execution 失败对于任务“:app:compileDebugJavaWithJavac”。
java.lang.WhosebugError
以及在我提供 AppComponent 的 App class 中:无法解析符号 '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:
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();
}
}
以及具有 RetrofitService 和 JokePresenter 引用的 JokeInteractor:
public class JokeInteractorImpl implements JokeInteractor {
private RetrofitService retrofitService;
private JokePresenter presenter;
public JokeInteractorImpl(RetrofitService service, JokePresenter presenter) {
this.retrofitService = service;
this.presenter = presenter;
}
@Override
public void getRandomJoke() {
retrofitService.getRandomJoke()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<RandomJokeResponse>() {
@Override
public void onCompleted() {
presenter.onRandomJokeCompleted();
}
@Override
public void onError(Throwable e) {
presenter.onError(e.getMessage());
}
@Override
public void onNext(RandomJokeResponse randomJokeResponse) {
presenter.onNextRandomJoke(randomJokeResponse);
}
});
}
Gradle 依赖关系:
apt 'com.google.dagger:dagger-compiler:2.7'
compile 'com.google.dagger:dagger:2.7'
provided 'javax.annotation:jsr250-api:1.0'
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
//rx java
compile 'io.reactivex:rxjava:1.1.6'
compile 'io.reactivex:rxandroid:1.2.1'
//dagger2
compile 'com.google.dagger:dagger:2.0'
provided 'org.glassfish:javax.annotation:10.0-b28'
有人能看出这里的问题吗?
查看执行情况:
@Module(includes = InteractorModule.class)
public class PresentationModule
和
@Module(includes = {NetworkModule.class, PresentationModule.class})
public class InteractorModule
你有循环依赖。您需要重新考虑您的设计。我建议将 Interactor
与 Presenter
解耦。
一个简单的解决方案:
将 getRandomJoke()
实现更改为 return Observable
并在 Presenter
内订阅它。并从 Interactor
.
presenter
引用
互动者:
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);
}
});
}
确保在您的 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
]
)