OkHttpClient 流程
// 1. 创建 HTTP 客户端
OkHttpClient client = new OkHttpClient();
// 2. 构建请求(例如 GET 请求)
Request request = new Request.Builder()
.url("https://httpbin.org/get")
.build();
// 3. 同步执行请求并获取响应
try (Response response = client.newCall(request).execute()) {
// 4. 处理响应
if (response.isSuccessful()) {
// 获取响应体内容(字符串形式)响应体只能读取一次,记得先保存
String responseBody = response.body().string();
System.out.println("响应内容: " + responseBody);
} else {
System.out.println("请求失败: " + response.code());
}
} catch (IOException e) {
e.printStackTrace(); // 处理网络异常
}
同步 vs 异步
execute():同步请求(阻塞当前线程),适合后台线程使用
enqueue():异步请求(非阻塞,需回调处理),适合主线程/UI线程
// 异步请求(非阻塞)
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
// 在后台线程处理成功响应
}
@Override
public void onFailure(Call call, IOException e) {
// 处理失败
}
});
资源释放
必须关闭 Response 对象(推荐使用 try-with-resources 语法) 在 try-with-resources 块结束时自动关闭,或在 finally 块中手动调用 response.close()
未关闭会导致内存和连接泄漏
- 释放底层 TCP 连接(否则会导致连接池耗尽)
- 关闭响应体输入流(防止内存泄漏)
- OkHttp 要求必须关闭每个 Response
线程安全
OkHttpClient 应全局复用(不要每次请求都创建新实例)
同步请求不能在 Android 主线程中使用(会引发 NetworkOnMainThreadException)

浙公网安备 33010602011771号