Okhttp
来源:互联网 发布:java方向 编辑:程序博客网 时间:2024/06/13 03:46
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0326/2643.html
http://www.jianshu.com/p/08173e58670d
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html
(what)
okHttp是一个网络框架,它是一个基于Http的一个高效的客户端。底层是HttpClient
(why)
1:缓存响应数据来减少重复的网络请求
2:可以从很多常用的连接问题中自动恢复;
Okhttp处理了很多的网络疑难杂症:会从很多常用的连接问题中自动复。如果您的服务器配置了多个IP地址,当第一个IP连接失败时,OkHttp会尝试连接下一个IP。
3:使用起来非常的简单,可扩展性非常的强;
(do)
1:支持一般的get请求,post请求。
2:基于Http的文件上传,文件下载,上传下载的进度回调,
3:加载图片
4:支持请求回调,直接返回对象,
5: 表单请求
(how)
1. 生成一个OkHttpClient(用以总的控制)
2. 用各种键值对包装我们的Request
3. 将请求加入队列生成一个Call管理请求
4. 若是同步请求直接执行excute等待处理返回Response,若为异步则实现Callback回调,在onResponse里获取Response参数
真正的请求是从创建Call对象开始的:如图
同步请求返回对象 call
异步请求返回对象 AsyncCall
每个 call对象只能被执行一次,如果想要一个完全一样的 call,可以利用 call.clone() 方法进行克隆。
我们还可以通过OKhttpClient对象来设置缓存,添加拦截器。也可以在构造request对象时设置缓存,
拦截器是一种能够监控,重写,重试调用的强大机制。
分为应用拦截和网络拦截。
1:应用拦截:
重点:
注册一个应用拦截器通过调用OkHttpClient.interceptors()返回的List的add()方法完成。
2:网络拦截:
注册网络拦截器和注册应用拦截器很类似。只是通过networkInterceptors()方法取代了interceptore()方法。
拦截器的执行顺序:
在拦截器的回调中,我们可以拿到两个重要的参数,一个是request,一个是response,而接口在回调时,会接收一个Chain类型的参数,这个参数保存了request和response的相关数据。该拦截器实例的功能是在请求发出前和接收到响应后。封装了一个拦截器链(Chain),并调用了Chain的proceed方法,传入原始的request对象,开始拦截器的调用。
查看proceed方法,可以看到,它使用循环+递归的方式,借助函数调用栈,将拦截器串联起来进行网络请求。
异步请求是需要创建线程池的,通过创建线程来进行请求;
OkHttp(GitHub:https://github.com/square/okhttp) 的 Interceptor 就如同名称「拦截器」一样,拦截你的 Request 做一些你想做的事情再送出去。例如:
1.自动加上使用者目前使用的语言送出去取得对应语言的回传内容。
2.将 Request 计算出这个 Request 的 sigunature 再附加上送出去。
在 okHttp 中分成 Application Interceptor 和 Network Interceptor 两种。 Application Interceptor 是会可以被 cache 起来的。
拦截器是 OkHttp 提供的对 HTTP 请求和响应进行统一处理的强大机制。拦截器在实现和使用上类似于 Servlet 规范中的过滤器。多个拦截器可以链接起来,形成一个链条。拦截器会按照在链条上的顺序依次执行。 拦截器在执行时,可以先对请求的 Request 对象进行修改;再得到响应的 Response 对象之后,可以进行修改之后再返回。
Interceptor 接口只包含一个方法 intercept,其参数是 Chain 对象。Chain 对象表示的是当前的拦截器链条。通过 Chain 的 request 方法可以获取到当前的 Request 对象。在使用完 Request 对象之后,通过 Chain 对象的 proceed 方法来继续拦截器链条的执行。当执行完成之后,可以对得到的 Response 对象进行额外的处理。
添加应用和网络拦截器
client.interceptors().add(new LoggingInterceptor()); //添加应用拦截器client.networkInterceptors().add(new LoggingInterceptor()); //添加网络拦截器
- OkHttp
- okhttp
- OkHttp
- OkHttp
- OkHttp
- okhttp
- OKHTTP
- okhttp
- Okhttp
- okHttp
- OkHttp
- okhttp
- Okhttp
- okhttp
- OkHttp
- okhttp
- okhttp
- okhttp
- IDEA 全局搜索快捷键 Ctrl +Shift+F,不起作用啦,啥情况
- 菜鸟搭建zynq linux开发平台
- KVM详解,太详细太深入了,经典
- 【HihoCoder】1175 拓扑排序·二 拓扑
- 如何解释召回率与准确率?
- Okhttp
- 解释型语言和编译型语言的区别
- Mybatis Cache(一级缓存、二级缓存)
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
- Linux性能评测工具之一:gprof篇
- kibana历史记录提示挡住搜索输入框
- 怎样运行Python文件
- 数据结构第三周项目——顺序表的应用
- 第1042期机器学习日报(2017-07-26)