我使用Dagger2,有时我的单身人士是空的,但无法知道它是如何发生的。
我有这样的单身:
@Singleton
public class WebViewManager {
private static final Object lock = new Object();
protected ArrayList<WebContentPartView> webViews;
private WebView mWebView;
@Inject
public WebViewManager(){}
我将它注入onCreate()的片段中。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Logger.logFragment(this);
IndexApplication.getAppComponent().inject(this);
setRetainInstance(false);
EventBus.getDefault().register(this);
this.setHasOptionsMenu(true);
velocityTracker = VelocityTracker.obtain();
}
当我打电话给我的单人方法时,它会抛出NPE。我无法重现它,但我可以在Crashlytics看到它。 当用户从片段中滑动时,我需要调用此方法。在Activity I中,我将这个片段存储为WeakReference。 当用户滑动,或者首先离开Activity时,我检查引用,如果它不为null,我从引用中获取Fragment,如果它也不是null,我调用WebViewManager的方法来加载空数据进入Fragment的WebViews(停止媒体)。在这一点上,我的一些用户获得了NPE。
我将我的片段注册到AppComponent,我在我的Application类中实例化。
此问题的更新。不是完全相同的问题,但是当我尝试将我的启动器Activity注入AppComponent(我在Application的onCreate()实例化时),我得到了这个异常:
致命异常:java.lang.RuntimeException 无法启动活动ComponentInfo {com.aff.index.main / com.aff.index.index.SplashActivity}:java.lang.NullPointerException:无法从非@Nullable @Provides方法返回null
当Dagger尝试提供SharedPreferences时出现此错误。 在Application的onCreate()初始化Dagger:
appComponent = DaggerAppComponent
.builder()
.appModule(new AppModule(this))
.build();
AppModule并提供Application,Context和SharedPreferences:
@Module
public class AppModule {
private final IndexApplication indexApplication;
public AppModule(IndexApplication application) {
this.indexApplication = application;
}
@Provides
IndexApplication indexApplication() {
return indexApplication;
}
@Provides
Context provideContext() {
return indexApplication.getApplicationContext();
}
@Provides
SharedPreferences provideSharedPreferences(IndexApplication application) {
return PreferenceManager.getDefaultSharedPreferences(application);
}
这是完整的堆栈跟踪:
致命异常:java.lang.RuntimeException:无法启动活动ComponentInfo {com.aff.index.main / com.aff.index.index.SplashActivity}:java.lang.NullPointerException:无法从非返回null @Nullable @Provides方法 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2762) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2848) 在android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1552) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:6334) 在java.lang.reflect.Method.invoke(Method.java) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 由java.lang.NullPointerException引起:无法从非@Nullable @Provides方法返回null at dagger.internal.Preconditions.checkNotNull(Preconditions.java:48) 在com.aff.index.dagger.AppModule_IndexApplicationFactory.get(AppModule_IndexApplicationFactory.java:22) 在com.aff.index.dagger.AppModule_IndexApplicationFactory.get(AppModule_IndexApplicationFactory.java:8) 在com.aff.index.dagger.AppModule_ProvideSharedPreferencesFactory.get(AppModule_ProvideSharedPreferencesFactory.java:30) 在com.aff.index.dagger.AppModule_ProvideSharedPreferencesFactory.get(AppModule_ProvideSharedPreferencesFactory.java:10) 在com.aff.index.index.SplashActivity_MembersInjector.injectMembers(SplashActivity_MembersInjector.java:135) 在com.aff.index.index.SplashActivity_MembersInjector.injectMembers(SplashActivity_MembersInjector.java:20) 在com.aff.index.dagger.DaggerAppComponent.inject(DaggerAppComponent.java:2583) 在com.aff.index.index.SplashActivity.onCreate(SplashActivity.java:185) 在android.app.Activity.performCreate(Activity.java:6743) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2715) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2848) 在android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1552) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:6334) 在java.lang.reflect.Method.invoke(Method.java) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)