Dagger2 Singletone为空

时间:2017-10-07 18:17:20

标签: android dagger-2

我使用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)

0 个答案:

没有答案