[英]How to properly call to retrofit service using rxJava?
我正在努力了解rxJava
,我正在尋找一位專家或有經驗的人來嘗試解決我的問題,事情是我已經使用RxJava一年了,但僅限於Retrofit
調用,我一直在使用Disposable
和做一些事情:
disposable = myService.myInterface.getData()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(this::handleResponse, this::handleError))
好吧,但是當我在谷歌上搜索時,我看到有人使用CompositeDisposable
,而不是做disposable = ...
他們正在做compositeDisposable.add(....)
我想知道何時使用每一個,我還說Single
用於返回值或錯誤,但Observable
之間有什么區別呢? 如果Single
也可以返回List<Object>
。
而在其他例子中,我使用這個:
private var subscription: Disposable? = null
subscription = model.result()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableObserver<ListViewModel>() {
override fun onNext(viewModel: ListViewModel) {
if (mView != null) {
mView!!.updateData(viewModel)
}
}
override fun onError(e: Throwable) {
e.printStackTrace()
if (mView != null) {
mView!!.showError()
}
}
override fun onComplete() {
if (mView != null) {
mView!!.hideProgressBar()
}
}
})
我注意到如果我在onStop()
使用add.(..)
東西,我必須清除compositeDisposable
而且我一直在使用disposable
沒有onNext
, onError
和onComplete
,你們可以讓我知道什么時候使用所有這些嗎?
Observable
和Single
之間的核心區別相對容易解釋:
Observable
可以將0發送到無限值 Single
只發出1次 建議使用CompositeDisposable
而不是“常規” Disposable
因為你可以用它來組合 Disposables
。 為什么這有用? 假設您同時調用3個不同的網絡請求,然后您可以將所有這些Disposables
添加到CompositeDisposable
。 現在,如果您切換Activity,例如,您不希望繼續這3個請求。 因此,調用CompositeDisposable
的dispose()
函數。 它將刪除所有Disposables
並且不允許添加新的Disposables
。 相反,還有一個名為clear()
的函數,它確實刪除了所有的Disposables,但它允許添加新的。
因此,基本上不是手動刪除所有Disposables
,而是通過單個方法調用來處理。 因此, CompositeDisposable
可以被想象為Disposables
的“經理”。
即使使用常規的Disposable
,也應調用dispose()
函數。 否則,您可以繼續運行Observables
盡管它與App完全不同。
好像你對RxJava有很多困惑。 首先熟悉RxJava概念,特別是Observable,Single,Completeable等。哪個用於什么目的? 使用適當的調度程序。 那么事情對你來說會很清楚。
當您在我們的課程中只有一個訂閱或者您想要獨立處理所有訂閱時,正在使用Disposable
。
將所有訂閱放在一起時,使用CompositeDisposable
,以便您可以基於生命周期以簡單的方式清除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.