RxJava2 Android onNext вызывается даже после утилизации композитного Disposable onDestroy - PullRequest
0 голосов
/ 17 апреля 2019

Ниже приведен мой код для добавления наблюдаемых в составные одноразовые

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

При уничтожении фрагмента Я вызываю метод остановки () презентатора, как показано ниже.

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

Очистка и удаление наблюдаемого внутриPresenter, как показано ниже

 @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

Почему это происходит?

1 Ответ

1 голос
/ 18 апреля 2019

Вы устанавливаете view на null перед очисткой CompositeDisposable, что позволяет для onNext() вызова перед выбытием:

Это:

appPresnter.setView(null);
appPresnter.onStop();

Должен быть транспонирован в:

appPresnter.onStop();
appPresnter.setView(null);

Также, вероятно, имеет смысл прояснить ситуацию в Fragment::onDestroyView или Fragment::onStop, а не Fragment::onDestroy

...