gpt4 book ai didi

java - 如何使用rxJava正确调用retrofit服务?

转载 作者:行者123 更新时间:2023-12-02 05:57:18 26 4
gpt4 key购买 nike

我试图理解rxJava我正在寻找专家或有经验的人来尝试解决我的问题,问题是我已经使用 RxJava 一年了,但仅限 Retrofit打电话,我一直用Disposable并做类似的事情:

disposable = myService.myInterface.getData()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(this::handleResponse, this::handleError))

好的,但是当我在 Google 上搜索时,我看到人们使用 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()
}
}
})

我注意到,如果我使用 add.(..)事情在onStop()我必须清除 compositeDisposable

而且我一直在使用 disposable没有 onNext , onErroronComplete你们能告诉我什么时候使用所有这些吗?

最佳答案

ObservableSingle 之间的核心区别相对容易解释:

  • Observable 可以发出 0 到无穷大的值
  • 另一方面,Single 仅发射 1 次
建议使用

CompositeDisposable 而不是“常规”Disposable,因为您可以用它来组合 Disposables。为什么这有用?假设您同时调用 3 个不同的网络请求,那么您可以将所有这些 Disposables 添加到 CompositeDisposable 中。例如,现在如果您切换 Activity,则您不想继续这 3 个请求。因此,CompositeDisposabledispose() 函数被调用。它将删除所有Disposables并且不允许添加新的。相反,还有一个名为 clear() 的函数,它也会删除所有 Disposables,但允许添加新的 Disposables。

所以基本上,您可以通过单个方法调用来处理此问题,而不是一一手动删除所有Disposables。因此,CompositeDisposable 可以被想象成 Disposables 的“管理器”。

即使使用常规的 Disposable,您也应该调用 dispose() 函数。否则,尽管位于应用程序的完全不同的部分,您仍可以继续运行 Observables

关于java - 如何使用rxJava正确调用retrofit服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com