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();
Android网络请求(3) 网络请求框架OkHttp的更多相关文章
- Android网络框架OkHttp之get请求(源码初识)
概括 OkHttp现在很火呀.于是上个星期就一直在学习OkHttp框架,虽然说起来已经有点晚上手了,貌似是2013年就推出了.但是现在它版本更加稳定了呀.这不,说着说着,OkHttp3.3版本在这几天 ...
- android -------- OkGo (让网络请求更简单的框架)
项目地址:https://github.com/jeasonlzy 该库是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofit更简单易用.支持大文件上传下载,上传进度回调,下载 ...
- 安卓开发常用网络请求框架OkHttp、Volley、XUtils、Retrofit对比
网络请求框架总结1.xutils 此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一 ...
- Android探索之HttpURLConnection网络请求
前言: 最近一直想着学习一下比较好的开源网络框架okhttp,想着学习之前还是先总结一下Android原生提供的网络请求.之前一直在使用HttpClient,但是android 6.0(api 23) ...
- 【Android】Volley做网络请求的几种用法
前言: 最近在将自己写的烂代码重构,以前使用的网络请求全是基于apache的HttpClient,简单使用还好,使用多了发现重复代码太多,而且每次使用都很繁琐,因此在网上找了半天网络请求的相关类库,最 ...
- iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range
一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...
- Android开发之http网络请求返回码问题集合。
HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 一.1xx(临时响应) 表示临时响 ...
- 网络框架OKHTTP使用场景全解析
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 一.引言 说句实 ...
- 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...
- 《Android进阶之光》--网络编程与网络框架
No1: Volley源码分析: Volley.newRequestQueue-> RequestQueue.start()-> CacheDispatcher.start()->C ...
随机推荐
- 一个包搞定中文数据集: datasetstore
工作中,总是要使用各种中文数据集,每次使用数据集都要花费不少的时间进行寻找,写预处理代码,结合不同的模型和框架做出相应的处理.有的时候好不容易找到合适的数据集,但是却因为网络问题,无法下载,下载了很长 ...
- 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)
vite 最近非常火,它是 vue 作者尤大神发布前端构建工具,底层基于 Rollup,无论是启动速度还是热加载速度都非常快.vite 随 vue3 正式版一起发布,刚开始的时候与 vue 绑定在一起 ...
- Bootstrap Blazor 开源UI库介绍-Table 虚拟滚动行
今天我们来介绍一下 Bootstrap Blazor 中 Table 组件的虚拟滚动行,什么是虚拟滚动呢,我查到的解释是:只渲染可视区域的列表项,非可见区域的 完全不渲染,在滚动条滚动时动态更新列表项 ...
- Kibana: 运用Data Visualizer来分析CSV数据
- 关于Elasticsearch使用java的说明
从Elastic 7.0开始,我们可以不安装JAVA.安装包包含一个相匹配的JAVA版本在里面. Elasticsearch包含来自JDK维护者(GPLv2 + CE)的捆绑版OpenJDK. 要使用 ...
- 关于MongoDB副本集和分片集群有关用户和权限的说明分析
1.MongoDB副本集 可以先创建超管用户,然后再关闭服务,创建密钥文件,修改配置文件,启动服务,使用超管用户登录验证,然后创建普通用户 2.MongoDB分片集群 先关闭服务,创建密钥文件,修改配 ...
- Maven+SpringMVC+Dubbo 简单的入门demo配置
转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...
- Node.js(四)json
npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) n ...
- jquery修改图片src
jquery修改图片src,会重新请求此图片url,重新加载图片.方法如下: $("#<img的id>").attr("src", src_valu ...
- 关于aws-Global区的新账户的一些限制坑点
在使用global-aws的时候,遇到几个限制坑点记录如下(都是需要发请求找aws服务支持才能提高) 1.关于Elastic IPs的限制,默认为 5,这样在ec2下的Elastic IPs中最多只能 ...