java–Dagger 2,supertypeInjector为null

java–Dagger 2,supertypeInjector为null,第1张

概述我正在尝试使用Dagger2实现DI.我以article为例,但是在生成的类中我得到了NullPointerException.这是我的堆栈跟踪:E/AndroidRuntime:Causedby:java.lang.NullPointerException:Attempttoinvokeinterfacemethod'voiddagger.MembersInjector.injectMembers(java.lang.O

我正在尝试使用Dagger 2实现DI.我以article为例,但是在生成的类中我得到了NullPointerException.

这是我的堆栈跟踪:

E/AndroIDRuntime:  Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'voID dagger.MembersInjector.injectMembers(java.lang.Object)' on a null object referenceE/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监听器等):

public class AuthActivity extends AbstractRestClIEntActivity {  @Inject TokenUtils mTokenUtils;  @Inject CallbackManager mCallbackManager; // it's about facebook  @OverrIDe protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_auth);  }  @OverrIDe protected voID inject() {    MoodyApplication.getApp(this).getAppComponent().logInComponent(new LogInModule()).inject(this);  }}

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

LogInComponent.java:

@ActivityScope @Subcomponent(modules = { LogInModule.class }) public interface LogInComponent {  voID inject(AuthActivity activity);}

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

NetworkModule.java:

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

LogInModule.java:

@Module public class LogInModule {  @ProvIDes @ActivityScope CallbackManager provIDeCallbackManager() {    return CallbackManager.Factory.create();  }}

这是生成的类AuthActivity_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();  }

任何帮助将非常感谢.

解决方法:

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

看起来它有冲突,当你的超级组件中你有超级注入.

我解决了这个删除一行:

AppComponent.java:

@Singleton @Component(modules = { UtilModule.class, NetworkModule.class })public interface AppComponent {  LogInComponent logInComponent(LogInModule logInModule);  //voID inject(AbstractRestClIEntActivity activity); // this one}
总结

以上是内存溢出为你收集整理的java – Dagger 2,supertypeInjector为null全部内容,希望文章能够帮你解决java – Dagger 2,supertypeInjector为null所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1119382.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存