Okhttp3 如何将每个url的结果收集起来,等所有请求结束,交给主线程使用
时间: 2023-06-14 18:04:59 浏览: 197
Android中Okhttp3实现上传多张图片同时传递参数
你可以使用 OkHttp3 的异步请求方式,在每个请求的回调中将结果收集起来,最后在所有请求结束后将结果交给主线程使用。具体做法如下:
1. 首先创建一个 OkHttp3 的 OkHttpClient 实例。
```java
OkHttpClient client = new OkHttpClient();
```
2. 然后构造多个 Request 实例,每个 Request 对应一个要请求的 URL。
```java
Request request1 = new Request.Builder()
.url("https://example.com/api/1")
.build();
Request request2 = new Request.Builder()
.url("https://example.com/api/2")
.build();
// ...
```
3. 接下来,使用 OkHttpClient 实例的 newCall() 方法创建多个 Call 实例。
```java
Call call1 = client.newCall(request1);
Call call2 = client.newCall(request2);
// ...
```
4. 最后,使用 Call 实例的 enqueue() 方法异步执行请求,并在回调中处理结果。
```java
List<String> results = new ArrayList<>();
call1.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
results.add(result);
}
@Override
public void onFailure(Call call, IOException e) {
// 处理请求失败的情况
}
});
call2.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
results.add(result);
}
@Override
public void onFailure(Call call, IOException e) {
// 处理请求失败的情况
}
});
// ...
// 所有请求执行完毕后,将结果交给主线程使用
runOnUiThread(new Runnable() {
@Override
public void run() {
// 处理 results 中的数据
}
});
```
在上面的代码中,我们使用了一个 List<String> 类型的变量 results 来保存每个请求的结果。在每个请求的回调中,将得到的结果添加到 results 中。最后,在所有请求执行完毕后,将结果交给主线程使用。注意,在主线程中更新 UI 的操作必须在 runOnUiThread() 方法中执行。
阅读全文