【问题标题】:How to run multi Observables conurrently in RxJava?如何在 RxJava 中同时运行多个 Observable?
【发布时间】:2019-07-21 21:58:45
【问题描述】:

我正在开发一个 Android 应用程序。

我想在 UI 中显示两个值。 这些值是从 API Server 检索的,我正在使用 Retrofit 来获取它们。

这是我的 ApiService 接口(改造):

interface ApiService {
    @Get
    fun getData1(): Observable<String>

    @Get
    fun getData2(): Observable<String>
}

下面是我的演示者代码:

val data1 = apiService.getData1().map { "d1" to it }
val data2 = apiService.getData1().map { "d2" to it }

Observable.just(data1, data2)
        .flatMap { it }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { (type, data) ->
            when (type) {
                "d1" -> view.showData1(data)
                "d2" -> view.showData2(data)
            }
        }

它工作正常。 但这是按顺序工作的。 第一个请求“getData1()”完成后,发送第二个请求“getData2()”。

我想同时发送它们。

我该怎么做?

【问题讨论】:

    标签: android kotlin retrofit rx-java


    【解决方案1】:

    您可以使用zip 运算符和RxKotlin 实现并发连接。

    示例)

    val data1 = apiService.getData1()
    val data2 = apiService.getData1()
    
    Observables.zip(data1, data2)
       .subscribe { data ->
           view.showData1(data.first)
           view.showData2(data.second)
       }.addTo(compositeDisposable)
    

    【讨论】:

    • 除非我弄错了,否则这不会同时运行getData 操作。您可以通过使用模拟getData 打印出正在使用的线程的测试来说明这一点。您可以通过添加subscribeOn 来解决此问题。即改成val data1 = apiService().getData1().subscribeOn(Schedulers.io())为例。
    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多