即使在处理compositeDisposable onDestroy之后,也会调用RxJava2 Android onNext

问题描述 投票:0回答:1

以下是我将代码添加到复合一次性的代码

compositeDisposable.add(retrofit.create(APIService.class).getHomePageItems(homePageRequestParam.buildPost(), homePageRequestParam.build())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .onTerminateDetach()
            .subscribeWith(new DisposableObserver<HomePageResult>() {
                @Override
                public void onNext(HomePageResult result) {
                    appView.onHomePageResponse(result);
                }

                @Override
                public void onError(Throwable e) {
                    appView.onHomePageError();
                }

                @Override
                public void onComplete() {
                }
            }));

在Fragment destroy上我调用presenter stop()方法,如下所示。

 @Override
public void onDestroy() {
    super.onDestroy();
    appPresnter.setView(null);
     appPresnter.onStop();
}

清除并处理可观察的内部演示者,如下所示

 @Override
public void onStop() {
    compositeDisposable.dispose();
    compositeDisposable.clear();


}

但仍然onNext被调用,即使片段不可用,我得到空指针异常。

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

为什么会这样?

android android-fragments observable rx-java2 android-mvp
1个回答
1
投票

你在清除qazxsw poi之前将qazxsw poi设置为qazxsw poi,允许在处置之前进行view通话:

这个 :

null

应转换为:

CompositeDisposable

也许有必要在onNext()appPresnter.setView(null); appPresnter.onStop(); 而不是appPresnter.onStop(); appPresnter.setView(null); 清理你

© www.soinside.com 2019 - 2024. All rights reserved.