
我正在尝试使用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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)