如何使用 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) }
我有一个需要调用的 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) }