android/kotlin- 使用 compositeDisposal(RXjava2) 进行改造不会在单击后退按钮时转到 response/throwable 块

android/kotlin- Retrofit with compositeDisposal(RXjava2) not go to response/throwable block while clicking back button

在 Kotlin 中,打开 activity 或片段时,我可以调用此格式的 api 并毫无问题地获得响应:

 compositeDisposable.add(dataManager 
                    .getHistory()
                    .subscribeOn(schedulerProvider.io())
                    .observeOn(schedulerProvider.ui())
                    .subscribe({ response ->
                        isSwipeRefreshCalled.set(false)
                        setIsLoading(false)
                        if (response.isSuccessful) {
                            setHasErrorMessage(false)


                            navigator.getHistory()

                        } else {
                            setHasErrorMessage(true)
                            navigator.showErrorMessage(response.responseMessage)
                        }
                    }, { throwable ->
                        setIsLoading(false)
                        isSwipeRefreshCalled.set(false)
                        navigator.handleError(throwable)
                    })
            )

,但每当我单击后退按钮并返回到那个 activity/fragment,尽管已调用 compositeDisposable,但什么也没有发生,既没有调用响应块也没有抛出异常。

注意 compositeDisposable.dispose() 在 activity/fragment 销毁时调用 (onDestroy()/onDestroyView())

很高兴有人帮助我。

这太大了,无法发表评论。我不确定这是不是问题所在,但我确实注意到问题描述中的某些内容。

根据我收集到的评论和问题,您正在做类似的事情:

onViewCreated:
   // add to composite disposable

onViewDestroyed:
   // dispose the composite disposable

问题是,当您调用 compositeDisposable.dispose() 时,您实际上使这个复合材料一次性无法使用。换句话说,每次您尝试向其添加一次性用品时,它都不会起作用,因为复合一次性用品已被处置。如果复合一次性用品保留在内存中,即如果您将其作为 viewModel 的字段而不重新创建,这可能是一个问题。下次你来用同样的复合一次性用品就不行了。

相反,您可以使用 compositeDisposable.clear(),这将从容器中取出所有一次性用品并进行处理。不过容器不是一次性的,可以用来装更多的一次性用品。