java - 返回 MembersInjectors.injectMembers 时出错

标签 java android dagger-2 rx-android

我正在开发一个具有 Dagger 依赖项的 Android 应用程序。通过构造函数注入(inject)注入(inject)类时,会抛出找不到符号的错误。如果我通过模块内定义的 @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;
    }
}

这是 BakeComponent

@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();
}

这是错误的

this image for all class with error

这是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 注释处理器和库版本不匹配。虽然您永远不应该使用与您包含的库不同的代码生成器版本,但您遇到这个特定问题是因为 as of Dagger 2.14, MembersInjector.injectMembers was removed ,并且 Dagger 2.14 及更高版本生成的代码不引用该方法。

the Dagger readme file ,删除这两行并添加这些,这将使您保持在最新版本的 Dagger 2 上:

implementation 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'

关于java - 返回 MembersInjectors.injectMembers 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50533476/

相关文章:

Java Swing JFileChooser 将文件附加到 JTextArea

java - 如何存储要在多个参与者之间共享的数据?

android - 图片资源存储和展示策略

android - sw720dp 和 xlarge 布局文件夹区别

android - 与Android开发集成良好的DVCS?

android - Dagger 2 - 构造函数注入(inject) - 非 Activity

c# - 输出仅取决于输入和对象状态的方法的名称是什么?

java - 没有像 postId 这样的 fb 我刚刚分享成功

android - Dagger 2,没有获取组件实例

android - Dagger2 的项目结构