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()
,这将从容器中取出所有一次性用品并进行处理。不过容器不是一次性的,可以用来装更多的一次性用品。
在 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()
,这将从容器中取出所有一次性用品并进行处理。不过容器不是一次性的,可以用来装更多的一次性用品。