😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
😊 座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍
文章目录
- 一 认识 OKHttp
- 二 OKHttp 的功能
- 三 OKHttp的简单使用
一 认识 OKHttp
Okhttp 是有 Square 公司开发的一款开源的 Java Http 客户端库,也就是一个请求库。广泛应用于 Android 和Java 应用。它的设计是为了更快地加载资源并节省带宽。OkHttp 提供了许多高级功能,如连接池、请求压缩、缓存等,使得网络请求更加高效和方便。它的设计是为了更快地加载资源并节省带宽。
二 OKHttp 的功能
- 请求和响应处理
- 异步和同步请求
- 连接池和请求复用
- 拦截器
- websocket支持
- 缓存支持
三 OKHttp的简单使用
-
添加OkHttp依赖(项目的build.gradle)
dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.3'}
-
创建OkHttp实例
OkHttpClient client = new OkHttpClient();
-
创建请求
Request request = new Request.Builder() .url("http://www.baidu.com") .build();
Builder()
是Request类的内部静态类Builder
的构造方法。在 OkHttp 库中,Request
类通过使用Builder
类来构建 HTTP 请求。通过Builder
类,可以设置请求的 URL、头部信息、请求体等属性,最后通过调用build()
方法创建一个Request
对象。 -
发起请求
在 Okhttp 中,发起请求有两种方式
- 同步请求
- 异步请求
两者主要区别在于执行方式和返回结果处理方式不同
4.1 同步请求
-
执行方式:同步请求会阻塞当前线程,直到请求完成并返回结果或者超时。这意味着在发送同步请求时,当前线程会一直等待直到服务器响应或超时。
-
返回结果处理:同步请求会返回一个Response对象,研发可立即处理该对象以获取响应数据。
try { Response response = client.newCall(request).execute(); String responseData = response.body().string(); // 处理响应数据 } catch (IOException e) { e.printStackTrace(); } //同步请求会在 execute() 方法处阻塞当前线程,直到请求完成。
client.newCall(request)
:这部分代码创建了一个 Call
对象,用于表示将要执行的请求。newCall(request)
方法是 OkHttpClient
类的方法,用于创建一个新的 Call
对象,该对象表示一个将要执行的请求。
execute()
:这部分代码执行了创建的 Call
对象,发送请求并等待获取响应。execute()
方法会在当前线程中执行网络请求,会阻塞当前线程直到请求完成或超时。
4.2 异步请求
-
执行方式:异步请求不会阻塞当前线程,而是通过回调函数在请求完成后处理响应数据。这种方式适合需要在后台执行网络请求并在请求完成后执行相应操作的情况。
-
返回结果处理:异步请求需要通过回调函数处理响应数据,通过包括成功、失败时的操作。
client.newCall(request).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) throws IOException { String responseData = response.body().string(); // 处理成功响应数据 } @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); // 处理请求失败情况 } }); //异步请求在 enqueue() 方法处启动请求,并在请求完成后通过回调函数处理响应数据。
client.newCall(request).enqueue(new Callback() {...});
:这行代码使用 OkHttp 的newCall(request)
方法创建一个异步的网络请求 Call 对象,然后通过enqueue()
方法将这个请求加入到调度队列中,并指定一个回调函数Callback()
来处理请求的响应结果。new Callback() {...}
:这里创建了一个匿名内部类对象,实现了 OkHttp 的Callback
接口,通过重写接口中的方法来处理网络请求的成功和失败情况。onFailure(Call call, IOException e)
方法:在网络请求失败时被调用。通常在这个方法中处理一些网络错误的逻辑,比如显示错误提示、重试请求等。onResponse(Call call, Response response) throws IOException
方法:在网络请求成功并得到响应时被调用。在这个方法中可以处理服务器返回的数据。如果响应成功(状态码在 200 到 299 之间),则可以从响应中获取数据,通常是将响应数据转换为字符串或其他格式进行处理。response.isSuccessful()
:这个方法用来检查响应是否成功(即 HTTP 状态码是否在 200 到 299 之间)。如果成功,通常意味着服务器成功处理了请求,可以继续处理响应数据。如果不成功,就会执行失败响应的处理逻辑。String responseData = response.body().string();
:这行代码用于获取响应体中的数据并转换为字符串。这里假设响应的数据是文本形式的,如果是其他类型(如 JSON),可能需要进行相应的转换。- 在
onResponse()
方法中,成功的响应数据会经过处理,可以根据具体需求来解析和处理响应数据。而在onFailure()
方法中,可以处理网络请求失败的情况,进行相应的错误处理。
在实际应用中,通常建议使用异步请求来处理网络请求,特别是在 Android 开发中,避免在主线程中发起同步请求以避免阻塞主线程导致应用无响应。异步请求可以提高应用的性能和用户体验,同时允许应用在等待网络响应时继续响应用户操作。在 OkHttp 中,使用异步请求可以通过
enqueue
方法来实现,该方法接受一个回调接口,当请求完成时会调用该接口的方法来处理响应数据。通过使用异步请求,可以更好地管理网络请求并提高应用程序的响应性。