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

标签 java android kotlin rx-java

我试图理解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/

相关文章:

java - 客户端日期时间与服务器日期时间不匹配

java - 如何将 String 映射到 Java 类?

java - Tomcat 端口重定向在版本 6.0.28 中不起作用

android - 在 Eclipse : how to make it less painful? 中使用 Android 应用程序切换试用版和专业版

android - 选中复选框的 ListView 中行的位置

通过 webview 显示的 Android 本地镜像模糊

android - 使用 JetpackCompose LazyColumn,Compose-Espresso 链接变为空闲超时

java - 使用线程时客户端/服务器 Swing 程序卡住

Kotlin 替换字符串中的多个单词

android jetpack 入门项目无法运行