本文共 3569 字,大约阅读时间需要 11 分钟。
OkHttp 使用教程
OkHttp 是 Android 开发中非常流行的 HTTP 客户端库,相比于 HttpURLConnection,OkHttp 显然更强大且易于使用。以下将从基础到高级功能详细介绍 OkHttp 的使用方法。
入门
OkHttp 的首次使用非常简单,只需要创建一个 OkHttpClient 实例即可:
OkHttpClient client = new OkHttpClient();
官方资料
OkHttp 的官方文档为开发者提供了详细的 API 文档和使用示例。你可以在 OkHttp GitHub 仓库 中找到更多信息。
使用范围
- 支持的平台:OkHttp 支持 Android 2.3(API 18)及以上版本。
- 兼容性:对 Java 开发者而言,OkHttp 也支持 JDK 1.7 及以上版本。
JAR 包准备
在项目中添加 OkHttp 的依赖:
com.squareup.okhttp okhttp latest
基本使用
HTTP GET
最简单的 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 类
Response 类提供了许多有用的方法:
isSuccessful():检查请求是否成功。body().string():获取响应体的字符串形式。headers():获取响应头。
HTTP POST
提交 JSON 数据
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); }}
高级功能
异步 GET
如果需要在后台进行 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
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);
每个 Call 的配置
如果需要为单个请求自定义配置,可以通过 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 应用的网络通信需求。
发表评论
最新留言
关于作者