Android网络请求(3) 网络请求框架OkHttp

本节我们来讲解OkHtpp网络请求框架

什么是网络请求框架

在我的理解中,网络请求框架是为了方便我们更加便捷规范的进行网络请求所建的类,我们通过调用该类中的方法可以快速地进行网络请求,切帮我们封装好了一些数据的处理方法,方便我们用更少的代码去做更多的事。

Android常见的网络请求框架

在android开发中,除了java原生的HttpURLConnection,常见的网络请求框架有

OkHttp

Volley

Retrofit

HttpClient

这其中最好用的莫过于Retrofit了,但是Retrofit是在OkHttp基础上再次进行封装的,所以我们先了解OkHttp网络请求,这对于我们日后的安卓开发也是有着很大的帮助。

OkHttp进行四种请求

导入依赖

在项目文件下build.gradle(app)的dependencies中导入所需要的库

  1. implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.12.0'

这里我们使用3.12.0版本,如果需要使用其他版本,修改version版本号为自己想要的版本。

创建四种方法

GET

  1. public static String get(String src){
  2. // 实例化OkHttpClient
  3. OkHttpClient okHttpClient = new OkHttpClient();
  4. // 构建request请求
  5. Request request = new Request.Builder()
  6. .url(src)
  7. .get()
  8. .build();
  9. // 发送请求获取返回数据
  10. Call call = okHttpClient.newCall(request);
  11. // 获取响应体
  12. ResponseBody body = null;
  13. String string = null;
  14. try {
  15. body = call.execute().body();
  16. // 转换成string
  17. string = body.string();
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. }
  21. return string;
  22. }

可以看出这些代码对比起java原生的HttpURLConnection请求来说,简短了很多,不再需要设置一些超时,IO流之类的操着,那么因为OkHttp封装时给定了默认值,这样就大大减少了我们的工作量,我们现在只需要发送请求获取响应数据就行了。

POST

  1. public static String post(String src,String json){
  2. // 实例化OkHttpClient
  3. OkHttpClient okHttpClient = new OkHttpClient();
  4. // 构建请求体
  5. RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
  6. // 构建request请求
  7. Request request = new Request.Builder()
  8. .post(requestBody)
  9. .url(src)
  10. .build();
  11. // 发送请求获取返回数据
  12. Call call = okHttpClient.newCall(request);
  13. // 获取响应体
  14. ResponseBody body = null;
  15. String string = null;
  16. try {
  17. body = call.execute().body();
  18. // 转换成string
  19. string = body.string();
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. return string;
  24. }

可以看出,这里我们只是修改了.get为.post并且传入了请求体,等于只需要新构建一个请求体,将我们的要向服务端发送的数据加入其中即可,这里我们使用的时application/json的方式,其他方式在第二篇提过一下,感兴趣的可以自己查阅资料。

PUT

put请求就更简单了,在原post请求中修改.post为.put即可,没有任何难度

  1. public static String put(String src,String json){
  2. // 实例化OkHttpClient
  3. OkHttpClient okHttpClient = new OkHttpClient();
  4. // 构建请求体
  5. RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
  6. // 构建request请求
  7. Request request = new Request.Builder()
  8. .url(src)
  9. .put(requestBody)
  10. .build();
  11. // 发送请求获取返回数据
  12. Call call = okHttpClient.newCall(request);
  13. // 获取响应体
  14. ResponseBody body = null;
  15. String string = null;
  16. try {
  17. body = call.execute().body();
  18. // 转换成string
  19. string = body.string();
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. return string;
  24. }

DELETE

delete请求有两种不同的方式:携带参数与不携带参数。

携带参数:携带参数实在原post请求中将.post修改为.delete,一样的传入一个请求体即可

  1. public static String delete(String src,String json){
  2. // 实例化OkHttpClient
  3. OkHttpClient okHttpClient = new OkHttpClient();
  4. // 构建请求体
  5. RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
  6. // 构建request请求
  7. Request request = new Request.Builder()
  8. .url(src)
  9. .delete(requestBody)
  10. .build();
  11. // 发送请求获取返回数据
  12. Call call = okHttpClient.newCall(request);
  13. // 获取响应体
  14. ResponseBody body = null;
  15. String string = null;
  16. try {
  17. body = call.execute().body();
  18. // 转换成string
  19. string = body.string();
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. return string;
  24. }

不携带参数则时在get请求上重写,将.get修改为.delete即可

  1. public static String delete(String src){
  2. // 实例化OkHttpClient
  3. OkHttpClient okHttpClient = new OkHttpClient();
  4. // 构建request请求
  5. Request request = new Request.Builder()
  6. .url(src)
  7. .delete()
  8. .build();
  9. // 发送请求获取返回数据
  10. Call call = okHttpClient.newCall(request);
  11. // 获取响应体
  12. ResponseBody body = null;
  13. String string = null;
  14. try {
  15. body = call.execute().body();
  16. // 转换成string
  17. string = body.string();
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. }
  21. return string;
  22. }

相信经历过HttpURLConnection那复杂的网络请求设置后,OkHttp框架将会让你更加快乐的进行网络开发。

修改默认设置

上面我们说过,OkHttp默认帮我们配置好了设置,那么我们不想使用默认设置该怎么办呢。

我们可以在创建OkHttpClient类的时候使用链式调用的方式来设置默认的参数,如

  1. // 实例化OkHttpClient
  2. OkHttpClient okHttpClient = new OkHttpClient.Builder()
  3. // 一天
  4. .connectTimeout(Duration.ofDays(1))
  5. // 系统默认dns
  6. .dns(Dns.SYSTEM)
  7. .build();

Android网络请求(3) 网络请求框架OkHttp的更多相关文章

  1. Android网络框架OkHttp之get请求(源码初识)

    概括 OkHttp现在很火呀.于是上个星期就一直在学习OkHttp框架,虽然说起来已经有点晚上手了,貌似是2013年就推出了.但是现在它版本更加稳定了呀.这不,说着说着,OkHttp3.3版本在这几天 ...

  2. android -------- OkGo (让网络请求更简单的框架)

    项目地址:https://github.com/jeasonlzy 该库是封装了okhttp的网络框架,可以与RxJava完美结合,比Retrofit更简单易用.支持大文件上传下载,上传进度回调,下载 ...

  3. 安卓开发常用网络请求框架OkHttp、Volley、XUtils、Retrofit对比

    网络请求框架总结1.xutils     此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一 ...

  4. Android探索之HttpURLConnection网络请求

    前言: 最近一直想着学习一下比较好的开源网络框架okhttp,想着学习之前还是先总结一下Android原生提供的网络请求.之前一直在使用HttpClient,但是android 6.0(api 23) ...

  5. 【Android】Volley做网络请求的几种用法

    前言: 最近在将自己写的烂代码重构,以前使用的网络请求全是基于apache的HttpClient,简单使用还好,使用多了发现重复代码太多,而且每次使用都很繁琐,因此在网上找了半天网络请求的相关类库,最 ...

  6. iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range

    一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...

  7. Android开发之http网络请求返回码问题集合。

    HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页  404 - 请求的网页不存在  503 - 服务不可用  一.1xx(临时响应) 表示临时响 ...

  8. 网络框架OKHTTP使用场景全解析

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 一.引言 说句实 ...

  9. 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别

    一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...

  10. 《Android进阶之光》--网络编程与网络框架

    No1: Volley源码分析: Volley.newRequestQueue-> RequestQueue.start()-> CacheDispatcher.start()->C ...

随机推荐

  1. JavaWeb核心篇(3)——JSP,MVC,三层架构

    JavaWeb核心篇(3)--JSP,MVC,三层架构 在本篇文章中我们会学习到JSP,MVC,三层架构 虽然JSP已经快被时代所淘汰,但是在一些老旧的工作场所还是有在使用,所以了解一下也不为过 至于 ...

  2. Windows服务器限制进程CPU使用率

    在Windows server 2012 之前的服务系统 2008和2008 R2中有系统资源管理器System Resource Manager可以管理系统的CPU和内存使用情况.特别对于一些自己开 ...

  3. Windows Server体验之SSH远程连接

    经过之前的各种远程管理方法,Windows Server可以被很好的管理,也能符合大多数Windows管理员的使用习惯.不过既然是命令行版本的Windows能不能和Linux一样管理呢?Windows ...

  4. Windows安装Jenkins详细教程(图文教程)

    一.安装前准备 1.提前安装好jdk,可参考以下链接进行安装 Windows安装JDK详细教程(图文教程) 2.Jenkins官网下载安装包(因为本人jdk安装的是1.8,所以会和最新版jenkins ...

  5. ELK日志报警插件ElastAlert并配置钉钉报警

    文章转载自:https://www.cnblogs.com/uglyliu/p/13118386.html ELK日志报警插件ElastAlert 它通过将Elasticsearch与两种类型的组件( ...

  6. Grafana Loki 学习之踩坑记

    转发自:https://mp.weixin.qq.com/s/zfXNEkdDC9Vqd9lh1ptC1g Grafana 出品的 loki 日志框架完美地与 kubernetes 的 label 理 ...

  7. kube-scheduler 调度调优

    文章转载自:https://www.kuboard.cn/learning/k8s-advanced/schedule/tuning.html kube-scheduler 是 Kubernetes ...

  8. 一文搞懂容器运行时 Containerd

    文章转载自:https://www.qikqiak.com/post/containerd-usage/ 在学习 Containerd 之前我们有必要对 Docker 的发展历史做一个简单的回顾,因为 ...

  9. 从SpringBoot启动,阅读源码设计

    目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...

  10. @Transactional注解真的有必要声明rollbackFor属性吗?

    @Transactional注解真的有必要声明rollbackFor属性吗? ​ 今天在看spring的事务底层源码时,想到一个问题,@Transactional注解真的有必要声明rollbackFo ...