Android网络请求(3) 网络请求框架OkHttp
Android网络请求(3) 网络请求框架OkHttp
本节我们来讲解OkHtpp网络请求框架
什么是网络请求框架
在我的理解中,网络请求框架是为了方便我们更加便捷规范的进行网络请求所建的类,我们通过调用该类中的方法可以快速地进行网络请求,切帮我们封装好了一些数据的处理方法,方便我们用更少的代码去做更多的事。
Android常见的网络请求框架
在android开发中,除了java原生的HttpURLConnection,常见的网络请求框架有
OkHttp
Volley
Retrofit
HttpClient
这其中最好用的莫过于Retrofit了,但是Retrofit是在OkHttp基础上再次进行封装的,所以我们先了解OkHttp网络请求,这对于我们日后的安卓开发也是有着很大的帮助。
OkHttp进行四种请求
导入依赖
在项目文件下build.gradle(app)的dependencies中导入所需要的库
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.12.0'
这里我们使用3.12.0版本,如果需要使用其他版本,修改version版本号为自己想要的版本。
创建四种方法
GET
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封装时给定了默认值,这样就大大减少了我们的工作量,我们现在只需要发送请求获取响应数据就行了。
POST
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
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
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();
最新文章
- ABAP游标的使用
- requestAnimationFrame
- mysql ODBC connector相关问题
- Git的优势
- 委托、匿名函数、Lambda表达式和事件的学习
- 【HDOJ】1508 Alphacode
- a href=#与 a href=javascript:void(0) 的差别
- 如何在Ubuntu 14.04中使用Samba共享文件
- F5(调试)和服务器控件
- uploadify上传图片的类型错误的解决办法
- C++ 虹软人脸识别 ArcFace 2.0 Demo
- mysql 查询近7天数据,缺失补0
- WPF中使用DataGrid时操作列按钮问题
- IIC_slaver 的仿真之路
- Luogu2264 树上游戏(点分治)
- ICCV2013 录用论文(目标跟踪相关部分)(转)
- mongodb分页查询
- Koa 框架 的错误处理
- poj3347 Kadj Squares【计算几何】
- 单变量微积分笔记20——三角替换1(sin和cos)
热门文章
- 延宕执行,妙用无穷,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中defer关键字延迟调用机制使用EP17
- Windows LDAP加固之替换LDAP加密证书
- filebeat直接给es传输日志,自定义索引名
- nacos基础知识理解
- 不停机为虚拟机添加主机磁盘(以VMware Workstation为例)
- 在 Linux 上安装服务器管理软件 Cockpit
- FastDFS 分布式文件系统的安装与使用---两台服务器搭建FastDFS环境
- Seal-Report: 开放式数据库报表工具
- BLS签名算法
- 使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实