前言

使用

Android Studio 用户

一般来说,只需要添加第一个 okgo 的核心包即可,其余的三个库根据自己的需要选择添加。

//必须使用

compile 'com.lzy.net:okgo:3.0.4'

//以下三个选择添加,okrx和okrx2不能同时使用

compile 'com.lzy.net:okrx:1.0.2'

compile 'com.lzy.net:okrx2:2.0.2'

compile 'com.lzy.net:okserver:2.0.5'

//或者

compile 'com.lzy.net:okgo:+' //版本号使用 + 可以自动引用最新版

compile 'com.lzy.net:okrx:+' //版本号使用 + 可以自动引用最新版

compile 'com.lzy.net:okserver:+' //版本号使用 + 可以自动引用最新版

注意事项

使用该网络框架时,必须要在 Application 中做初始化,详细的初始化办法点击这里

okgo使用的okhttp的版本是最新的3.8.0版本,OkGo详细文档点击这里

okrx是基于RxJava的扩展项目,OkRx详细文档点击这里

okrx2是基于RxJava2的扩展项目,OkRx2详细文档点击这里

okserver是对okgo的扩展,包含两个核心入口类:

OkDownload是统一的下载管理,支持断点续传功能,OkDownload详细文档点击这里

OkUpload是统一的上传管理,OkUpload详细文档点击这里

OkGo主要功能

基本的 get、post、put、delete、head、options、trace、patch 八种请求;

支持 upString,upJson,upBytes,upFile 等 up 类方法上传特定数据;

支持一个 key 上传一个文件,也可以一个 key 上传多个文件,也可以多文件和多参数一起上传;

大文件下载和下载进度回调;

大文件上传和上传进度回调;

支持 cookie 的自动管理,并可自定义 cookie 管理策略;

支持缓存模式,不仅支持 http 缓存协议,也支持自定义缓存策略;

支持重定向;

支持自定义超时自动重连次数;

支持链式调用;

支持 https 访问,支持双向认证;

支持根据 tag 取消请求,也可全部取消;

支持自定义 Callback,自动解析网络数据;

请求

1. 请求所有配置

无论做什么请求,第一行的泛型一定要加!

注意以下几点:

这里演示的是一次普通请求所有能配置的参数,真实使用时不需要配置这么多,按自己的需要,选择性的使用即可;

第一行的泛型一定要特别注意,这个表示你请求网络的数据类型是什么,必须指定,否则无法解析网络数据;

.post(url):

这个表示当前请求是 post 请求,当然一共支持

GET,HEAD,OPTIONS,POST,PUT,DELETE,PATCH, TRACE 这 8 种请求方式,你只需要改改这个方法名就行了,很方便;

.params():

添加参数的时候,最后一个 isReplace 为可选参数,默认为 true,即代表相同 key 的时候,后添加的会覆盖先前添加的;

.tag(this):

请求的 tag,用于标识当前的请求,方便后续取消对应的请求,如果你不需要取消请求,也可以不用设置;

.isMultipart():

该方法表示是否强制使用 multipart/form-data 表单上传,因为该框架在有文件的时候,无论你是否设置这个参数,默认都是

multipart/form-data 格式上传,但是如果参数中不包含文件,默认使用 application/x-www-form-urlencoded 格式上传,如果你的服务器要求无论是否有文件,都要使用表单上传,那么可以用这个参数设置为 true;

.isSpliceUrl():

该方法表示是否强制将 params 的参数拼接到 url 后面,默认 false 不拼接。一般来说,post、put 等有请求体的方法应该把参数都放在请求体中,不应该放在 url 上,但是有的服务端可能不太规范,url 和请求体都需要传递参数,那么这时候就使用该参数,它会将你所有使用 .params() 方法传递的参数,自动拼接在 url 后面;

.retryCount():

该方法是配置超时重连次数,也可以在全局初始化的时候设置,默认使用全局的配置,即为 3 次,你也可以在这里为你的这个请求特殊配置一个,并不会影响全局其他请求的超时重连次数;

.cacheKey() .cacheTime() .cacheMode():

这三个是缓存相关的配置,详细请看缓存介绍;

.headers():

该方法是传递服务端需要的请求头,如果你不知道什么是请求头,看wiki首页关于网络抓包中的http协议链接;

.params():

该方法传递键值对参数,格式也是 http 协议中的格式,详细参考上面的 http 协议连接;

.addUrlParams() .addFileParams() .addFileWrapperParams():

这里是支持一个 key 传递多个文本参数,也支持一个 key 传递多个文件参数,详细也看上面的 http 协议连接;

另外,每个请求都有一个 .client() 方法可以传递一个 OkHttpClient

对象,表示当前这个请求将使用外界传入的这个 OkHttpClient 对象,其他的请求还是使用全局的保持不变。那么至于这个

OkHttpClient 你想怎么配置,或者配置什么东西,那就随意了,改个超时时间,加个拦截器什么的统统都是可以的,看你心情喽。

特别注意: 如果你的当前请求使用的是你传递的 OkHttpClient

对象的话,那么当你调用 OkGo.getInstance().cancelTag(tag) 的时候,是取消不了这个请求的,因为 OkGo 只能取消使用全局配置的请求,不知道你这个请求是用你自己的 OkHttpClient 的,如果一定要取消,可以是使用 OkGo 提供的重载方法,详细看下方的取消请求的部分。

2. Response对象介绍

先看Response对象内部的字段:

该对象一共有5个字段,分别表示以下意思:

body:当前返回的数据,T 即为数据的泛型。使用方法 body() 获取该值。如果请求成功,回调 onSuccess(),该字段为 convertResponse() 解析数据后返回的数据。如果发生异常,回调 onError(),该字段值为 null;

throwable:如果发生异常,回调 onError(),该字段保存了当前的异常信息。如果请求成功,回调 onSuccess(),该字段为 null。使用方法 getException() 获取该值;

isFromCache:表示当前的数据是来自哪里,true:来自缓存,false:来自网络。使用方法 isFromCache() 获取该值;

rawCall:表示当前请求的真正 okhttp3.Call 对象。使用方法 getRawCall() 获取该值;

rawResponse:表示当前请求服务端真正返回的 okhttp3.Response 对象,注意:如果数据来自缓存,该对象为 null,如果来自网络,该对象才有值。使用方法 getRawResponse() 获取该值。

另外,Response 对象还有以下几个方法:

code():http 协议的响应状态码,如果数据来自网络,无论成功失败,该值都为真实的响应码,如果数据来自缓存,该值一直为 -1;

message():http 协议对响应状态码的描述信息,如果数据来自网络,无论成功失败,该值都为真实的描述信息,如果数据来自缓存,该值一直为 null;

headers():服务端返回的响应头信息,如果数据来自网络,无论成功失败,该值都为真实的头信息,如果数据来自缓存,该值一直为 null;

isSuccessful():本次请求是否成功,判断依据是:是否发生了异常。

3. 基本请求

无论做什么请求,第一行的泛型一定要加!

那么我们不可能每次请求都写上面那么一大堆,这里可以看到,一次简单的请求,这么写就够了。

4. 请求 Bitmap

如果你知道你的请求数据是图片,可以使用这样的方法 :

5. 基本文件下载

如果你要下载文件,可以这么写。

FileCallback 具有三个重载的构造方法,分别是

FileCallback():空参构造

FileCallback(String destFileName):可以额外指定文件下载完成后的文件名

FileCallback(String destFileDir, String destFileName):可以额外指定文件的下载目录和下载完成后的文件名

文件目录如果不指定,默认下载的目录为 sdcard/download/,文件名如果不指定,则按照以下规则命名:

首先检查用户是否传入了文件名,如果传入,将以用户传入的文件名命名

如果没有传入,那么将会检查服务端返回的响应头是否含有

Content-Disposition=attachment;filename=FileName.txt 该种形式的响应头,如果有,则按照该响应头中指定的文件名命名文件,如 FileName.txt;

如果上述响应头不存在,则检查下载的文件url,例如:

http://image.baidu.com/abc.jpg,那么将会自动以 abc.jpg 命名文件

如果 url 也不能把文件名解析出来,那么最终将以 "unknownfile_" + System.currentTimeMillis() 命名文件

这里面有个新对象叫 Progress,关于这个对象的解释,看这里我进行了专门的讲解。

6. 上传 String 类型的文本

一般此种用法用于与服务器约定的数据格式,当使用该方法时,params 中的参数设置是无效的,所有参数均需要通过需要上传的文本中指定,此外,额外指定的 header 参数仍然保持有效。

默认会携带以下请求头:

Content-Type: text/plain;charset=utf-8

如果你对请求头有自己的要求,可以使用这个重载的形式,传入自定义的 content-type:

// 比如上传 xml 数据,就可以自己指定请求头:

upString("这是要上传的长文本数据!",MediaType.parse("application/xml"))

7. 上传 JSON 类型的文本

该方法与 upString 没有本质区别,只是数据格式是 json,一般来说,需要自己创建一个实体 bean 或者一个 map,把需要的参数设置进去,然后通过三方的 Gson 或者 fastjson 转换成 json 对象,最后直接使用该方法提交到服务器。

默认会携带以下请求头,请不要手动修改,okgo 也不支持自己修改

Content-Type: application/json;charset=utf-8

8. 上传文件

上传文件支持文件与参数一起同时上传,也支持一个 key 上传多个文件,以下方式可以任选。

特别要注意的是:

很多人会说需要在上传文件到时候,要把 Content-Type

修改掉,变成 multipart/form-data,就像下面这样的。其实在使用 OkGo 的时候,只要你添加了文件,这里的的 Content-Type 不需要你手动设置,OkGo 自动添加该请求头,同时,OkGo 也不允许你修改该请求头。

Content-Type: multipart/form-data; boundary=f6b76bad-0345-4337-b7d8-b362cb1f9949

如果没有文件,那么 OkGo 将自动使用以下请求头,同样 OkGo 也不允许你修改该请求头。

Content-Type: application/x-www-form-urlencoded

如果你的服务器希望你在没有文件的时候依然使用 multipart/form-data 请求,那么可以使用 .isMultipart(true) 这个方法强制修改,一般来说是不需要强制的。

有人说他有很多文件,不知道数量,又要一个文件对应一个 key 该怎么办,其实很简单,把调用链断开,用循环添加就行了嘛。

9. 取消请求

之前讲到,我们为每个请求都设置了一个参数 tag,取消就是通过这个 tag 来取消的。通常我们在 Activity 中做网络请求,当 Activity 销毁时要取消请求,否则会发生内存泄露,那么就可以在 onDestory() 里面写如下代码:

注意以下取消的请求不要全部用,自己按需要写,我只是写出来,告诉你有这么几个方法。

10. 同步请求

同步请求有两种方式,第一种是返回原始的 Response 对象,自行解析网络数据,就像这样:

或者可以返回解析完成的对象,如果你使用过 Retrofit,那么你对这个 Call 对象一定不会陌生,这里面有个方法是 converter(),需要传递一个 Converter 接口,作用其实就是解析网络返回的数据,你也可以自定义 Converter,代码如下:

什么是同步请求?

同步:提交请求 -> 等待服务器处理 -> 处理完毕返回。这个期间客户端浏览器不能干任何事

异步:请求通过事件触发 -> 服务器处理(这时客户端仍然可以作其他事情)-> 处理完毕

同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

11. https 请求

https 的请求和 http 请求一模一样,只需要在初始化配置一下,详细的 https 配置方法点击这里。

12. 参数的顺序

添加 headers 和 params 的方法各有三处,在提交的时候,他们是有顺序的,如果对提交顺序有需要的话,请注意这里:

第一个地方,全局初始化时添加

第二个地方,Callback 的 onStart() 方法中添加

第三个地方,执行网络请求的时候添加

那么,最终执行请求的参数的添加顺序为:

Header 顺序: HKAAA -> HKBBB -> HKEEE -> HKFFF -> HKCCC -> HKDDD

Params 顺序: PKAAA -> PKBBB -> PKEEE -> PKFFF -> PKCCC -> PKDDD

一句话总结就是:全局添加的在最开始,Callback 添加的在最后,请求添加的在中间。

android okgo 参数map,OkGo 网络请求框架介绍与使用说明相关推荐

  1. android搭建网络框架,Android 搭建MVP+Retrofit+RxJava网络请求框架(三)

    上一篇中主要是将mvp+rxjava+retrofit进行了结合,本篇主要是对mvp框架的优化:建议先去看上一篇:Android 搭建MVP+Retrofit+RxJava网络请求框架(二) 针对vi ...

  2. android okgo 参数map,Okgo分享

    OkGo使用分享 OkGo这个框架可能很多人听过,但是okHttp开发安卓的人士一定听过,可能还在使用.现在最火的两个框架一个是OkHttp另一个是Retrofit,Retrofit用过一次感觉不太好 ...

  3. android okgo 网络请求框架

    OkGo - OkHttpUtils-2.0.0升级后改名 OkGo,全新完美支持RxJava 项目地址:https://github.com/jeasonlzy,欢迎star,欢迎issue 该库是 ...

  4. Retrofit网络请求框架使用简析——Android网络请求框架(四)

    题记:-- 很累,累到想要放弃,但是放弃之后将会是一无所有,又不能放弃, 唯有坚持,唯有给自忆打气,才能更勇敢的走下去,因为无路可退,只能前行, 时光一去不复返,每一天都不可追回,所以要更珍惜每一存光 ...

  5. Android网络请求框架之Retrofit(二)

    前面一篇文章介绍了Retrofit的基本用法,没有看过的童鞋可以移步:Android网络请求框架之Retrofit(一),现在我们来继续介绍Retrofit配合RxJava.RxAndroid的用法. ...

  6. Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架

    目录 1.什么是MVP? 2.什么是Retrofit? 3.RxJava 4.实践 之前公司的项目用到了MVP+Retrofit+RxJava的框架进行网络请求,所以今天特此写一篇文章以做总结.相信很 ...

  7. android post请求_Vue 网络请求框架 axios 使用教程

    点击上方"代码集中营",设为星标 优秀文章,第一时间送达! 前期回顾 1. Vue 学习入门指南 2. Vue 入门环境搭建 3. Visual Studio Code 使用指南 ...

  8. vue 获取url地址的参数_Vue 网络请求框架 axios 使用教程

    点击上方"代码集中营",设为星标 优秀文章,第一时间送达! 前期回顾 1. Vue 学习入门指南 2. Vue 入门环境搭建 3. Visual Studio Code 使用指南 ...

  9. Android肝帝战纪之网络请求框架封装(Retrofit的封装)

    网络请求框架封装(OkHttp3+Retrofit+loading的封装) Retrofit的Github链接 点此链接到Github AVLoadingIndicatorView的Github链接( ...

最新文章

  1. Database design best practice(1):关于primary key及其它
  2. 人工智能如何彻底改变全球物流和供应链管理
  3. mysql的告警日志_运维日记|MySQL关于aborted告警日志的分析
  4. 自适应响应式炫酷汽车配件类网站源码 html5高端大气汽车网站织梦模板
  5. 面试官系统精讲Java源码及大厂真题 - 31 AbstractQueuedSynchronizer 源码解析(下)
  6. Javascript的数组对象
  7. cad在线转低版本_为什么别人CAD绘图总是比你快?因为他早就偷偷掌握了这几个技巧...
  8. 当程序员,你应该懂的法则
  9. java common-lang_common-lang3工具类-使用手册
  10. python进阶(一)关联sql的算法操作
  11. Shell脚本:Linux Shell脚本学习指南(超详细)
  12. oracle相克军,Oracle视频课程在线观看与下载-甲骨论-172
  13. linux抓包出现nbns,如何用抓包分析工具定位感染主机和用户
  14. java获取当前周数_java获取周数的方法
  15. cnpm install Error: EACCES: permission denied
  16. Vue中图片裁剪的实现
  17. Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重,为什么还有这么强的生命力,尤其是在企_-Chaz-_新浪博客
  18. 学会原谅自己,我们会更加强大
  19. 打开cmd的方式与常用的dos命令
  20. idea中xml打开方式变成file,如何将file格式文件变回.xml文件

热门文章

  1. Web网页设计作业记录:音频和视频文件的插入
  2. Python django宠物商城
  3. explode函数mysql_mysql实现php函数explode功能mysql_explode
  4. 飞书、钉钉和企微的三巨头之争下,其他厂商在移动平台赛道如何奋起直追?
  5. 浑身无力酸痛是植物神经紊乱了吗?
  6. Linux笔记【008】| 文件系统与文件压缩
  7. 游戏建模师是做什么的?薪资高不高?想入行的小白都知道吗?
  8. wps垂直排列标题与文本_如何让商品标题类文本根据内容长度垂直居中
  9. Indeed Skype面试
  10. R沟通|用xaringan包制作幻灯片