OkHttp 简介
OkHttp 是由 Square 公司开发的一款高效、可靠的 Android 和 Java 网络请求框架,它封装了底层的网络通信细节,提供了简洁易用的 API,广泛应用于移动应用和后端服务的网络请求场景。
核心特点
-
高效性
- 支持 HTTP/2,允许在单个连接上并发发送多个请求,减少延迟。
- 支持连接池复用,避免频繁创建和关闭连接的开销。
- 自动压缩请求体和响应体(如 GZIP),减少数据传输量。
-
可靠性
- 自动重试机制:对于幂等请求(如 GET),在遇到网络波动时会自动重试。
- 支持缓存策略:可以配置本地缓存,减少重复请求,提升离线体验。
- 处理 SSL 握手、证书验证等安全问题,默认遵循行业标准安全协议。
-
易用性
- 简洁的链式调用 API,方便构建请求(如 GET、POST、PUT 等)。
- 支持同步和异步两种请求方式,异步请求通过回调或协程(Kotlin)处理结果。
- 可扩展性强:支持拦截器(Interceptor)机制,方便添加日志、token 验证、请求加密等功能。
基本使用流程
-
添加依赖
在build.gradle(或build.gradle.kts)中添加 OkHttp 依赖:implementation 'com.squareup.okhttp3:okhttp:4.12.0' // 最新版本可查阅官网 -
创建 OkHttpClient 实例
通常全局单例使用,可配置超时时间、拦截器等:OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) // 连接超时 .readTimeout(10, TimeUnit.SECONDS) // 读取超时 .writeTimeout(10, TimeUnit.SECONDS) // 写入超时 .addInterceptor(new LoggingInterceptor()) // 添加拦截器 .build(); -
构建请求(Request)
通过Request.Builder定义请求方法、URL、 headers、请求体等:Request request = new Request.Builder() .url("https://api.example.com/data") .get() // 默认是 GET 方法,可省略 .addHeader("Authorization", "Bearer token") .build(); -
发送请求
- 同步请求:在子线程中调用
client.newCall(request).execute(),直接获取响应:Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String responseBody = response.body().string(); // 获取响应体 } - 异步请求:通过回调处理结果,无需手动管理线程:
client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 请求失败(如网络错误) } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { String responseBody = response.body().string(); } } });
- 同步请求:在子线程中调用
关键组件
- OkHttpClient:核心类,负责管理连接池、超时时间、拦截器等配置,是发送请求的入口。
- Request:表示一个 HTTP 请求,包含 URL、方法、 headers、请求体等信息。
- Response:表示服务器的响应,包含状态码、 headers、响应体等。
- Interceptor:拦截器,可在请求发送前或响应返回后进行处理(如添加公共参数、打印日志)。
- Call:表示一个已准备好的请求,可执行同步或异步请求。
与其他框架的关系
- OkHttp 常与 Retrofit 配合使用:Retrofit 是基于 OkHttp 的封装,通过注解定义接口,简化网络请求代码。
- 相比 Android 原生的
HttpURLConnection,OkHttp 更高效、易用,且维护活跃。
总结
OkHttp 凭借高效、可靠、易用的特点,成为 Android 开发中网络请求的首选框架之一。无论是简单的 GET 请求,还是复杂的文件上传/下载、断点续传,OkHttp 都能提供良好的支持,同时通过拦截器等机制可灵活扩展功能,满足各种业务需求。

1万+

被折叠的 条评论
为什么被折叠?



