簡體   English   中英

如何使用rxJava正確調用改造服務?

[英]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沒有onNextonErroronComplete ,你們可以讓我知道什么時候使用所有這些嗎?

ObservableSingle之間的核心區別相對容易解釋:

  • Observable可以將0發送到無限值
  • 另一方面, Single只發出1次

建議使用CompositeDisposable而不是“常規” Disposable因為你可以用它來組合 Disposables 為什么這有用? 假設您同時調用3個不同的網絡請求,然后您可以將所有這些Disposables添加到CompositeDisposable 現在,如果您切換Activity,例如,您不希望繼續這3個請求。 因此,調用CompositeDisposabledispose()函數。 它將刪除所有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM