如何使用 okhttpclient 和 RxJava 调用多个请求但不进行改造

How to call multiple requests with okhttpclient and RxJava but without retrofit

我有一个需要调用的 URL 列表,如果所有这些都得到成功响应,我可以继续。

我可以简单地使用 RxJava 和 Retrofit 来完成,例如:

@PUT
fun uploadFile(@Url url: String, @Body file: RequestBody): Single<Response<Void>>


Observable.fromIterable(uploadUrls)
    .flatMapSingle {
        val requestBody = InputStreamRequestBody(contentResolver, uri)
        upsellServiceApi.uploadFile(url, requestBody)
    }
    .toList()
    .subscribeOn(schedulerProvider.io())
    .observeOn(schedulerProvider.ui())
    .subscribe(
        { responses ->
            if (responses.all { it.isSuccessful }) {
                // continue
            } else {
               //error
            }
        },
        {
            // error
        }

现在我需要做同样的事情而不需要改造并且只使用 okhttpclient。我应该怎么做?

您可以使用 https://github.com/liujingxing/rxhttp to keep using RxJava. Or implement it yourself

这样的库

如果您不想使用 RxJava,那么只需自己入队并处理回调方法即可。

解决了

Observable.fromIterable(uploadUrls)
    .map {
        val request = Request.Builder().url(url).put(InputStreamRequestBody(contentResolver!!, uri)).build()
        okHttpClient.newCall(request).execute()
    }
    .collect(
        {
            mutableListOf<Response>()
        },
        {
                list: MutableList<Response>, response: Response -> list.add(response)
        }
    )
    .subscribeOn(schedulerProvider.io())
    .observeOn(schedulerProvider.ui())
    .subscribe(
        { responses ->
            if (responses.all { it.isSuccessful }) {
                // continue
            } else {
                // error
            }
        },
        {
            // error
        }
    ).also { compositeDisposable.add(it) }