- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本节我们来讲解OkHtpp网络请求框架 。
在我的理解中,网络请求框架是为了方便我们更加便捷规范的进行网络请求所建的类,我们通过调用该类中的方法可以快速地进行网络请求,切帮我们封装好了一些数据的处理方法,方便我们用更少的代码去做更多的事.
在android开发中,除了java原生的HttpURLConnection,常见的网络请求框架有 。
OkHttp 。
Volley 。
Retrofit 。
HttpClient 。
这其中最好用的莫过于Retrofit了,但是Retrofit是在OkHttp基础上再次进行封装的,所以我们先了解OkHttp网络请求,这对于我们日后的安卓开发也是有着很大的帮助.
在项目文件下build.gradle(app)的dependencies中导入所需要的库 。
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.12.0'
这里我们使用3.12.0版本,如果需要使用其他版本,修改version版本号为自己想要的版本.
public static String get(String src){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建request请求
Request request = new Request.Builder()
.url(src)
.get()
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
可以看出这些代码对比起java原生的HttpURLConnection请求来说,简短了很多,不再需要设置一些超时,IO流之类的操着,那么因为OkHttp封装时给定了默认值,这样就大大减少了我们的工作量,我们现在只需要发送请求获取响应数据就行了.
public static String post(String src,String json){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建请求体
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 构建request请求
Request request = new Request.Builder()
.post(requestBody)
.url(src)
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
可以看出,这里我们只是修改了.get为.post并且传入了请求体,等于只需要新构建一个请求体,将我们的要向服务端发送的数据加入其中即可,这里我们使用的时application/json的方式,其他方式在第二篇提过一下,感兴趣的可以自己查阅资料.
put请求就更简单了,在原post请求中修改.post为.put即可,没有任何难度 。
public static String put(String src,String json){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建请求体
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 构建request请求
Request request = new Request.Builder()
.url(src)
.put(requestBody)
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
delete请求有两种不同的方式:携带参数与不携带参数.
携带参数:携带参数实在原post请求中将.post修改为.delete,一样的传入一个请求体即可 。
public static String delete(String src,String json){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建请求体
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 构建request请求
Request request = new Request.Builder()
.url(src)
.delete(requestBody)
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
不携带参数则时在get请求上重写,将.get修改为.delete即可 。
public static String delete(String src){
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 构建request请求
Request request = new Request.Builder()
.url(src)
.delete()
.build();
// 发送请求获取返回数据
Call call = okHttpClient.newCall(request);
// 获取响应体
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 转换成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
相信经历过HttpURLConnection那复杂的网络请求设置后,OkHttp框架将会让你更加快乐的进行网络开发.
上面我们说过,OkHttp默认帮我们配置好了设置,那么我们不想使用默认设置该怎么办呢.
我们可以在创建OkHttpClient类的时候使用链式调用的方式来设置默认的参数,如 。
// 实例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
// 一天
.connectTimeout(Duration.ofDays(1))
// 系统默认dns
.dns(Dns.SYSTEM)
.build();
最后此篇关于Android网络请求(3)网络请求框架OkHttp的文章就讲到这里了,如果你想了解更多关于Android网络请求(3)网络请求框架OkHttp的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在实现 Server-Sent Events使用 OkHttp 的库。服务器发送事件的工作原理是与服务器保持开放的 HTTP 连接,在该服务器上,“事件”可以流式传输回客户端。连接只会在错误或客户
我需要用 OkHttp 重现错误,这样我就可以提交错误或在 StackOverflow 上提问。 无需大量设置即可执行此操作的最简单方法是什么? 我读过 https://stackoverflow.c
我需要用 OkHttp 重现错误,这样我就可以提交错误或在 StackOverflow 上提问。 无需大量设置即可执行此操作的最简单方法是什么? 我读过 https://stackoverflow.c
我正在尝试使用 OkHttp 与 HTTP/2 服务器进行通信客户端。 添加到 Maven POM: com.squareup.okhttp3 okhttp 3.2.0 这是我的
我在使用我的应用程序时不断在 Logcat 中看到以下日志行: 19098-19147/ W/OkHttpClient: A connection to was leaked. Did you fo
我的团队正受此困扰issue使用 slack 集成来上传文件,因此根据该问题中的评论,我想限制我们的 Kotlin 实现中的请求。 我正在尝试集成 Okio Throttler在 OkHttp 拦截器
如何验证 okhttp 是否成功协商了 http/2 而没有使用 https/1.1?我可以检查回复中的一些信息吗? 谢谢, -托尼 最佳答案 仅供引用,因为 okhttp 3.0 左右 OkHttp
我想提出一个请求并强制它使用 Protocol.HTTP_2。 我尝试了下面的代码: import okhttp3.{OkHttpClient, Protocol, Request} import s
我不太熟悉 OkHttp 库,我对它应该如何用于异步请求有一些疑问。 对于 Android 编程,我将 android 库用于 http,并将 asyncTask 用于某些请求。 但是因为我想尝试 O
我在我的项目中使用 Retrofit-1.6.0 + okhttp-2.0.0-RC1 。当我运行项目时出现错误。 java.lang.RuntimeException: Retrofit detec
OkHttpClient 的默认行为是将 keep-alive 设置为 true。对于我们的特定用例,我需要将其设置为 false。 我没有在 Java 源代码中找到任何设置来执行此操作。 有人遇到过
我试图让 OkHttp 在我的 Android Studio 项目中工作,我创建了一个类并从这里粘贴以下代码:https://github.com/square/okhttp/blob/master/
我注意到 OkHttp 在 Android 5.0+ 中通过 ALPN 支持 h2。 来自 some article ,我了解到我们可以对 http/2 请求使用 NPN 协商。 我可以通过 NPN
我知道,Retrofit 在内部使用 OkHttp。但是,我可以看到一些开发人员提供了以下方法的应用 return new Retrofit.Builder() .baseUrl(Bu
我正在努力让 Android 上的 OkHttpClient 使用自定义证书发出 HTTPS 请求,同时绑定(bind)到特定网络接口(interface)的本地地址。我目前对此的尝试使用以下 OkH
我有一个用于 https 连接演示的 native android 应用程序,我遇到了这样的异常:: 我的连接代码很简单: URL url = new URL("https://192.168.1.5
我正在重写 EventListener 中的 dnsEnd() 函数: @Override public void dnsEnd(Call call, String domainName, L
我有okhttp的android多项目设置,作为多个项目的一部分 在项目A中,okhttp包含在源代码中。 在项目B中,okhttp带有库依赖项的一部分。 构建时,出现以下错误。 Execution
我正在尝试使用pesapal向我的应用程序添加付款但遇到问题,我将它们的依赖实现'com.pesapal.android:pesapalandroid:1.0.5'添加到我的应用程序中,从那时起我就一
我只是尝试使用 OkHttp但是当我将我的 gradle 文件与 Android Studio 同步时,我遇到了以下问题: Error:Failed to find: com.squareup.okh
我是一名优秀的程序员,十分优秀!