Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 匕首2,supertypeInjector为空_Java_Android_Dependency Injection_Dagger 2 - Fatal编程技术网

Java 匕首2,supertypeInjector为空

Java 匕首2,supertypeInjector为空,java,android,dependency-injection,dagger-2,Java,Android,Dependency Injection,Dagger 2,我正试图用匕首2实现DI。我将此用作示例,但在生成的类中得到NullPointerException 这是我的堆栈跟踪: E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void dagger.MembersInjector.injectMembers(java.lang.Object)' on a null object reference E/A

我正试图用匕首2实现DI。我将此用作示例,但在生成的类中得到
NullPointerException

这是我的堆栈跟踪:

E/AndroidRuntime:  Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void dagger.MembersInjector.injectMembers(java.lang.Object)' on a null object reference
E/AndroidRuntime:     at me.cullycross.moody.activities.AuthActivity_MembersInjector.injectMembers(AuthActivity_MembersInjector.java:29)
E/AndroidRuntime:     at me.cullycross.moody.activities.AuthActivity_MembersInjector.injectMembers(AuthActivity_MembersInjector.java:9)
E/AndroidRuntime:     at me.cullycross.moody.di.components.DaggerAppComponent$LogInComponentImpl.inject(DaggerAppComponent.java:186)
E/AndroidRuntime:     at me.cullycross.moody.activities.AuthActivity.inject(AuthActivity.java:59)
E/AndroidRuntime:     at me.cullycross.moody.activities.AbstractRestClientActivity.onCreate(AbstractRestClientActivity.java:21)
E/AndroidRuntime:     at me.cullycross.moody.activities.AuthActivity.onCreate(AuthActivity.java:50)
AbstractRestClientActivity.java:

public abstract class AbstractRestClientActivity extends RxAppCompatActivity {

  @Inject protected RestClient.ApiService mApiService; // if I comment or delete this line everything works like a charm

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    inject();
  }

  protected abstract void inject();
}
AuthActivity.java(我删除了util方法、onclick侦听器等):

MoodyApplication.java:

public class MoodyApplication extends Application {

  private AppComponent mAppComponent;

  public static MoodyApplication getApp(Context context) {
    return (MoodyApplication) context.getApplicationContext();
  }

  @Override public void onCreate() {
    super.onCreate();
    initAppComponent();
  }

  private void initAppComponent() {
    mAppComponent = DaggerAppComponent.builder()
        .networkModule(new NetworkModule())
        .utilModule(new UtilModule())
        .build();
  }

  public AppComponent getAppComponent() {
    return mAppComponent;
  }
}
AppComponent.java:

@Singleton @Component(modules = { UtilModule.class, NetworkModule.class })
public interface AppComponent {
  LogInComponent logInComponent(LogInModule logInModule);
  void inject(AbstractRestClientActivity activity);
}
@ActivityScope @Subcomponent(modules = { LogInModule.class }) public interface LogInComponent {
  void inject(AuthActivity activity);
}
@Singleton @Component(modules = { UtilModule.class, NetworkModule.class })
public interface AppComponent {
  LogInComponent logInComponent(LogInModule logInModule);
  //void inject(AbstractRestClientActivity activity); // this one
}
LogInComponent.java:

@Singleton @Component(modules = { UtilModule.class, NetworkModule.class })
public interface AppComponent {
  LogInComponent logInComponent(LogInModule logInModule);
  void inject(AbstractRestClientActivity activity);
}
@ActivityScope @Subcomponent(modules = { LogInModule.class }) public interface LogInComponent {
  void inject(AuthActivity activity);
}
@Singleton @Component(modules = { UtilModule.class, NetworkModule.class })
public interface AppComponent {
  LogInComponent logInComponent(LogInModule logInModule);
  //void inject(AbstractRestClientActivity activity); // this one
}
UtilModule.java:

@Module public class UtilModule {
  @Provides @Singleton @Named("expose") Gson provideExposeGson() {
    return new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
        .excludeFieldsWithoutExposeAnnotation()
        .create();
  }

  @Provides @Singleton TokenUtils provideTokenUtils() {
    return new TokenUtils();
  }
}
@Module public class NetworkModule {
  @Provides @Singleton RestClient provideRestClient(@Named("expose") Gson gson) {
    return new RestClient(gson);
  }

  @Provides @Singleton RestClient.ApiService provideApiService(RestClient client) {
    return client.getApiService();
  }
}
@Module public class LogInModule {
  @Provides @ActivityScope CallbackManager provideCallbackManager() {
    return CallbackManager.Factory.create();
  }
}
NetworkModule.java:

@Module public class UtilModule {
  @Provides @Singleton @Named("expose") Gson provideExposeGson() {
    return new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
        .excludeFieldsWithoutExposeAnnotation()
        .create();
  }

  @Provides @Singleton TokenUtils provideTokenUtils() {
    return new TokenUtils();
  }
}
@Module public class NetworkModule {
  @Provides @Singleton RestClient provideRestClient(@Named("expose") Gson gson) {
    return new RestClient(gson);
  }

  @Provides @Singleton RestClient.ApiService provideApiService(RestClient client) {
    return client.getApiService();
  }
}
@Module public class LogInModule {
  @Provides @ActivityScope CallbackManager provideCallbackManager() {
    return CallbackManager.Factory.create();
  }
}
LogInModule.java:

@Module public class UtilModule {
  @Provides @Singleton @Named("expose") Gson provideExposeGson() {
    return new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
        .excludeFieldsWithoutExposeAnnotation()
        .create();
  }

  @Provides @Singleton TokenUtils provideTokenUtils() {
    return new TokenUtils();
  }
}
@Module public class NetworkModule {
  @Provides @Singleton RestClient provideRestClient(@Named("expose") Gson gson) {
    return new RestClient(gson);
  }

  @Provides @Singleton RestClient.ApiService provideApiService(RestClient client) {
    return client.getApiService();
  }
}
@Module public class LogInModule {
  @Provides @ActivityScope CallbackManager provideCallbackManager() {
    return CallbackManager.Factory.create();
  }
}
下面是生成的类
AuthActivity\u MembersInjector
中的生成方法,它会引发NPE:

  @Override
  public void injectMembers(AuthActivity instance) {  
    if (instance == null) {
      throw new NullPointerException("Cannot inject members into a null reference");
    }
    supertypeInjector.injectMembers(instance); // here is NPE, supertypeInjector is null
    instance.mTokenUtils = mTokenUtilsProvider.get();
    instance.mCallbackManager = mCallbackManagerProvider.get();
  }
任何帮助都将不胜感激。

我打开了一个(它是重复的)

似乎有冲突,当在你的超组件中,你有一个超类的注入

我解决了这个问题,删除了一行:

AppComponent.java:

@Singleton @Component(modules = { UtilModule.class, NetworkModule.class })
public interface AppComponent {
  LogInComponent logInComponent(LogInModule logInModule);
  void inject(AbstractRestClientActivity activity);
}
@ActivityScope @Subcomponent(modules = { LogInModule.class }) public interface LogInComponent {
  void inject(AuthActivity activity);
}
@Singleton @Component(modules = { UtilModule.class, NetworkModule.class })
public interface AppComponent {
  LogInComponent logInComponent(LogInModule logInModule);
  //void inject(AbstractRestClientActivity activity); // this one
}