java - 返回 MembersInjectors.injectMembers 时出错
问题描述
我正在开发一个具有 dagger 依赖项的 Android 应用程序。当通过构造函数注入注入类时,它会抛出一个找不到符号的错误。如果我通过在模块内定义的 @Provides 方法提供依赖项,那么一切正常。
import java.util.List;
import rx.Observable;
import rx.Observer;
import javax.inject.Inject;
/**
* Created by ibrahim on 22/05/18.
* get injected View that MainView
*/
public class BakePresenter extends BasePresenter<MainView> implements Observer<BakingResponse> {
@Inject
protected BakeApiService mApiService;
@Inject
protected BakeMapper mBakeMapper;
@Inject
public BakePresenter() {
}
public void geBaking() {
getView().onShowDialog("Loading.....");
Observable<BakingResponse> bakePresenterObservable= mApiService.getBake();
subscribe(bakePresenterObservable,this);
}
@Override
public void onCompleted() {
getView().onShowToast();
getView().onHideDialog("Loading completed.....");
}
@Override
public void onError(Throwable e) {
getView().onShowToast();
getView().onHideDialog("Loading error....."+String.valueOf(e.getMessage()));
}
@Override
public void onNext(BakingResponse bakingResponse) {
List<Bake> bakeList= mBakeMapper.mapBake(bakingResponse);
getView().onBakeLoaded(bakeList);
}
}
这是 Bakemodule 类
@Module
public class BakeModule {
private MainView mView;
public BakeModule (MainView view){
this.mView=view;
}
@PreActivity
@Provides
MainView provideMainView(){
return mView;
}
BakeApiService provideBakeApiService(Retrofit retrofit){
return retrofit.create(BakeApiService.class);
}
@PreActivity
@Provides
public BakeApiService bakeApiService(final MembersInjector<BakeApiService> injector, final Retrofit retrofit) {
Log.d("service", "station service created");
BakeApiService bakeApiService = provideBakeApiService(retrofit) ;
injector.injectMembers(bakeApiService);
return bakeApiService;
}
}
这是烘焙组件
@PreActivity
@Component (modules = BakeModule.class,dependencies = ApplicationComponent.class)
public interface BakeComponents {
/**
* @param activity the Components want inject into inside MainActivity
*/
void inject(MainActivity activity);
MainView gMainView();
}
这是错误
这是 build.gradle
apply plugin: 'com.android.application'
android {
compileOptions.incremental = false
compileSdkVersion 27
defaultConfig {
applicationId "com.ibrahim.baking_app"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
}
dependencies {
// Other dependencies should go here
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.okhttp:okhttp:2.7.2'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0'
implementation 'io.reactivex:rxjava:1.3.0'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'com.github.bumptech.glide:glide:4.7.1'
compileOnly 'org.glassfish:javax.annotation:10.0-b28'
implementation "com.google.dagger:dagger:2.14.1"
compileOnly 'javax.annotation:jsr250-api:1.0'
compile 'javax.inject:javax.inject:1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
compileOnly 'org.glassfish:javax.annotation:10.0-b28'
implementation 'com.jakewharton:butterknife:8.8.1'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:support-annotations:27.1.1'
annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.4.0'
//Unit Testing
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'org.mockito:mockito-core:2.18.3'
androidTestImplementation 'org.powermock:powermock-module-junit4:1.6.2'
androidTestImplementation 'org.powermock:powermock-api-mockito:1.6.2'
}
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
解决方案
implementation "com.google.dagger:dagger:2.14.1"
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
您正在使用不匹配的 Dagger 注释处理器和库版本。尽管您永远不应使用与您包含的库不同的代码生成器版本,但您会遇到此特定问题,因为从 Dagger 2.14 开始,MembersInjector.injectMembers 已被删除,并且 Dagger 2.14 及更高版本生成的代码不引用该方法。
就像在Dagger 自述文件中一样,删除这两行并添加它们,这将使您继续使用最新版本的 Dagger 2:
implementation 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
推荐阅读
- amazon-web-services - Terraform AWS NLB TLS 直通
- javascript - Javascript 数字上 +- 的目的是什么?
- python - Heroku Flask 应用程序在使用 POST 请求时崩溃
- reactjs - 在可编辑区域中选择匹配的单词
- html - (已保存)事件在 HTML 中被触发两次
- angular - 如何使用 Angular 9 显示多个项目轮播?
- javascript - 我正在制作一个拼字游戏,但我不知道如何随机生成 7 个字母,每次玩家使用他们的字母时
- jms - ActiveMQ Artemis:从属实例可以成为客户端的连接点吗?
- google-apps-script - 设置交替列数字格式
- python - json.decoder.JSONDecodeError:期望值:第 1 行第 18 列(字符 17),未发现任何故障