首页 > 解决方案 > 如何检查 RXJava 是否完成或从队列中清空

问题描述

我有一个使用 Retrofit 和 RXJava 循环请求的函数,如下所示

for (i in month..12) {
    if (Conn.connection(applicationContext)) {
        Api.create().getDateInMonth("2019-$i-01")
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<DateDataResponse> {
                override fun onSubscribe(d: Disposable) {}

                @SuppressLint("NewApi")
                override fun onNext(dateDataResponse: DateDataResponse) {
                    Log.d("OnSuccess", "success")
                }
                @SuppressLint("NewApi")
                override fun onError(e: Throwable) {
                    Log.d("onError", "error" + e.message)
                }

                override fun onComplete() {
                    Log.d("onComplete", "onComplete")
                }
            })
    } else
        Log.d("onError", "No Internet Connection")
    }
}

因此,如果某些请求错误或成功,它将一直持续到第 12 个请求完成。我想检测我是否已经从我的请求中得到了所有响应

标签: javaandroidrx-javaretrofit2

解决方案


如果你把它变成一个单一的链,那么你可以使用onComplete()回调来验证你的所有请求都已经完成。例如:

Observable.range(0, 12)
    .filter { i-> Conn.connection(applicationContext) }
    .flatMap { i -> Api.create().getDateInMonth("2019-$i-01") } 
    .subscribeOn(io())
    .observeOn(mainThread())
    .subscribe({ i-> }, { t-> }, {/*onComplete*/ })

推荐阅读