【问题标题】:How to call multiple requests with okhttpclient and RxJava but without retrofit如何使用 okhttpclient 和 RxJava 调用多个请求但不进行改造
【发布时间】:2022-01-24 09:19:37
【问题描述】:

我有一个需要调用的 URL 列表,如果我得到所有这些 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 来做同样的事情。我该怎么做?

【问题讨论】:

    标签: android retrofit rx-java okhttp


    【解决方案1】:

    您可以使用像 https://github.com/liujingxing/rxhttp 这样的库来继续使用 RxJava。或者自己实现Using RxJava and Okhttp

    如果您不想使用 RxJava,则只需自己排队和处理回调方法。

    【讨论】:

      【解决方案2】:

      解决了

      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) }
      

      【讨论】:

        猜你喜欢
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 2017-01-11
        • 2018-05-03
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多