在Kotlin中,打开活动或片段时,我可以以这种格式调用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)
})
)
,但是每当我单击backButton并返回到该活动/片段时,尽管CompositeDisposable已被调用,但什么也没有发生,并且既没有调用响应块也没有引发异常。
请注意,compositeDisposable.dispose()
在活动/片段被破坏时被调用(onDestroy()/ onDestroyView())
很高兴有人帮助我。
太大,无法发表评论。我不确定这是问题所在,但我确实在问题描述中注意到了一些。
[从评论和我收集到的问题中,您正在做类似的事情:
onViewCreated:
// add to composite disposable
onViewDestroyed:
// dispose the composite disposable
问题是,当您调用compositeDisposable.dispose()
时,实际上使此复合一次性物品无法使用。换句话说,每次您尝试向其中添加一次性物品时,它都不会被使用,因为它已经被丢弃。如果复合一次性用品留在内存中,即如果您将其作为viewModel
的字段,则可能会出现问题。下次您使用相同的一次性复合材料时,它将无法使用。
相反,您可以使用compositeDisposable.clear()
,它将从容器中取出所有一次性用品并进行处理。但是,该容器未放置,可以用于更多的一次性用品。