[android / kotlin-在单击“后退”按钮时,使用CompositeDisposal(RXjava2)进行改装无法转到响应/可抛出的块]

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

在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())

很高兴有人帮助我。

kotlin retrofit2 rx-java2 back-button
1个回答
0
投票

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

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

onViewCreated:
   // add to composite disposable

onViewDestroyed:
   // dispose the composite disposable

问题是,当您调用compositeDisposable.dispose()时,实际上使此复合一次性物品无法使用。换句话说,每次您尝试向其中添加一次性物品时,它都不会被使用,因为它已经被丢弃。如果复合一次性用品留在内存中,即如果您将其作为viewModel的字段,则可能会出现问题。下次您使用相同的一次性复合材料时,它将无法使用。

相反,您可以使用compositeDisposable.clear(),它将从容器中取出所有一次性用品并进行处理。但是,该容器未放置,可以用于更多的一次性用品。

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