返回

OkHttp总结(一)

Android

一、使用

流程图:

[流程图]

在使用 OkHttp 发起一次请求时,对于使用者最少存在 OkHttpClient、Request 与 Call 三个对象:

  • OkHttpClient:OkHttpClient 是 OkHttp 的核心对象,它负责管理网络请求的配置和执行,比如超时时间、缓存策略等。
  • Request:Request 是一个请求对象,它包含了请求的 URL、请求方法(GET、POST 等)、请求头等信息。
  • Call:Call 是一个调用对象,它负责执行请求并返回结果。

创建一个 OkHttpClient 对象:

OkHttpClient client = new OkHttpClient();

创建一个 Request 对象:

Request request = new Request.Builder()
        .url("https://www.example.com")
        .build();

执行请求:

Call call = client.newCall(request);
Response response = call.execute();

二、请求方法

OkHttp 支持多种 HTTP 请求方法,包括 GET、POST、PUT、DELETE 等。这些方法分别对应不同的请求操作,例如:

  • GET:获取资源
  • POST:创建资源
  • PUT:更新资源
  • DELETE:删除资源

具体使用哪种方法取决于请求的目的。

三、请求头

请求头是随请求一起发送的元数据,它可以用来指定客户端的各种信息,比如语言、用户代理等。OkHttp 提供了多种方法来设置请求头,例如:

Request request = new Request.Builder()
        .url("https://www.example.com")
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept-Language", "zh-CN")
        .build();

四、请求体

请求体是随请求一起发送的数据,它可以是文本、文件、图片等。OkHttp 提供了多种方法来设置请求体,例如:

Request request = new Request.Builder()
        .url("https://www.example.com")
        .post(RequestBody.create(MediaType.parse("application/json"), "{ \"name\": \"John Doe\" }"))
        .build();

五、响应

当请求执行成功后,OkHttp 会返回一个 Response 对象。Response 对象包含了请求的响应状态码、响应头和响应体等信息。开发者可以根据需要从 Response 对象中获取这些信息。

Response response = call.execute();
if (response.isSuccessful()) {
    String body = response.body().string();
} else {
    System.out.println("Error: " + response.code());
}

六、超时控制

OkHttp 允许开发者设置请求的超时时间,超时时间一到,请求会自动取消。这可以防止请求长时间阻塞,导致应用程序无响应。

OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(10, TimeUnit.SECONDS)
        .readTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10, TimeUnit.SECONDS)
        .build();

七、重试机制

OkHttp 提供了重试机制,当请求失败时,OkHttp 会自动重试请求,直到达到最大重试次数或请求成功为止。

OkHttpClient client = new OkHttpClient.Builder()
        .retryOnConnectionFailure(true)
        .build();

八、缓存机制

OkHttp 提供了缓存机制,可以将请求的结果缓存起来,以便下次请求时直接从缓存中获取,从而提高请求效率。

OkHttpClient client = new OkHttpClient.Builder()
        .cache(new Cache(cacheDir, 10 * 1024 * 1024))
        .build();

九、常见用法

  • 异步请求: OkHttp 支持异步请求,开发者可以将请求放到一个线程池中执行,这样就不会阻塞主线程。
Call call = client.newCall(request);
call.enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) {
        // 请求成功
    }

    @Override
    public void onFailure(Call call, IOException e) {
        // 请求失败
    }
});
  • 取消请求: OkHttp 允许开发者取消请求,这样可以防止请求长时间阻塞,导致应用程序无响应。
call.cancel();

十、注意事项

  • OkHttp 是一个第三方库,需要在项目中添加依赖。
  • OkHttp 是线程安全的,可以同时执行多个请求。
  • OkHttp 提供了丰富的配置选项,开发者可以根据需要进行配置。
  • OkHttp 有一个完整的文档,开发者可以参考文档来学习使用 OkHttp。

十一、参考