本文共 3569 字,大约阅读时间需要 11 分钟。
OkHttp 是 Android 开发中非常流行的 HTTP 客户端库,相比于 HttpURLConnection,OkHttp 显然更强大且易于使用。以下将从基础到高级功能详细介绍 OkHttp 的使用方法。
OkHttp 的首次使用非常简单,只需要创建一个 OkHttpClient 实例即可:
OkHttpClient client = new OkHttpClient();
OkHttp 的官方文档为开发者提供了详细的 API 文档和使用示例。你可以在 OkHttp GitHub 仓库 中找到更多信息。
在项目中添加 OkHttp 的依赖:
com.squareup.okhttp okhttp latest
最简单的 GET 请求:
OkHttpClient client = new OkHttpClient();String run(String url) throws IOException { Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { return response.body().string(); } else { throw new IOException("Unexpected code " + response); }} Response 类提供了许多有用的方法:
isSuccessful():检查请求是否成功。body().string():获取响应体的字符串形式。headers():获取响应头。public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");String post(String url, String json) throws IOException { RequestBody body = RequestBody.create(JSON, json); Request request = new Request.Builder() .url(url) .post(body) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { return response.body().string(); } else { throw new IOException("Unexpected code " + response); }} String post(String url, Listparams) throws IOException { RequestBody formBody = new FormEncodingBuilder() .add("platform", "android") .add("name", "bug") .add("subject", "XXXXXXXXXXXXXXX") .build(); Request request = new Request.Builder() .url(url) .post(formBody) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { return response.body().string(); } else { throw new IOException("Unexpected code " + response); }}
如果需要在后台进行 HTTP 请求,可以使用异步方法:
public void enqueue(Request request, Callback callback) { client.newCall(request).enqueue(callback);} HTTP 头信息可以通过 Response.headers() 方法获取。以下示例显示如何提取特定头信息:
Response response = client.newCall(request).execute();System.out.println("Content-Type: " + response.headers("Content-Type"));System.out.println("Date: " + response.headers("Date")); Gson 可以用来将 JSON 响应转换为 Java 对象:
Gson gson = new Gson();Gist gist = gson.fromJson(response.body().charStream(), Gist.class);
为了提高性能,可以配置缓存:
Cache cache = new Cache(cacheDirectory, 10 * 1024 * 1024); // 10 MiBclient.setCache(cache);
使用 Call.cancel() 可以立即停止正在执行的请求:
final Call call = client.newCall(request);executor.schedule(new Runnable() { @Override public void run() { call.cancel(); // 可以在这里关闭其他相关资源 }}).execute(); 通过 setConnectTimeout、setReadTimeout 和 setWriteTimeout 方法可以设置超时:
client.setConnectTimeout(10, TimeUnit.SECONDS);client.setReadTimeout(30, TimeUnit.SECONDS);client.setWriteTimeout(10, TimeUnit.SECONDS);
如果需要为单个请求自定义配置,可以通过 clone() 方法创建深拷贝的 OkHttpClient 实例:
OkHttpClient clonedClient = client.clone();clonedClient.setReadTimeout(500, TimeUnit.MILLISECONDS);Response response = clonedClient.newCall(request).execute();
对于需要 Basic 验证的请求,OkHttp 会自动处理 401 错误。你可以通过 Authenticator 实现自定义验证逻辑。
OkHttp 提供了现代化的 HTTP 客户端 API,简化了网络请求的编写和管理。它支持缓存、超时控制、异步请求以及各种 HTTP 方法(如 GET、POST、PUT 等)。通过合理配置和使用,OkHttp 能够满足大多数 Android 应用的网络通信需求。
转载地址:http://mtsfk.baihongyu.com/