美文网首页
Okhttp同步请求

Okhttp同步请求

作者: 米花噗噗 | 来源:发表于2019-05-27 00:01 被阅读0次

0Okhttp是Square开源的轻量级框架

网络请求的框架用于代替HttpurlConnection和httpclient。可以用来文件上传,下载,加载图片,网络请求,是根据build模式(将一个复杂对象的构建与它的表示分离),链式调用,每一个方法的返回值类型都是当前类的对象

ok如何去进行同步的get请求?

1.会创建okhttpClient对象

okhttpClient有两种创建方式

    (1).直接new对象

    (2).通过建造者Builde模式添加其他属性的操作

2.生成Request对象

一个请求可能包含一个特定内容

3.创建Response对象

响应就是对生成的Request对象的一个回复,包括状态码,http头

try catch里面的是同步请求的一个关键代码

这个call对象是代表一个request,response

通过调用newCall方法,并将request对象传入就可以获取call对象

4.执行同步的请求

调用call的execute这个方法

从内部可以看到call的execute是一个接口

如果这个call被设为true就说明已经被执行,如果这个时候再次被调用就会抛出异常,这就说明每一个call请求只能被调用一次,会打印一些异常信息

client.dispatcher就是获取一个调度器一个调度方法

executed就是在双向队列当中存放同步请求,在新创建的同步请求放入到队列当中然后去执行

okhttp提供两种类型的请求方式:

    ①.阻塞式的       ②.异步的非阻塞式的

不管是同步还是异步都会调用getResponswWithInterceptor()这个方法就是ok里面一个拦截器列的作用

拦截器可以重写,监听网络请求,在每一个拦截器内部都会调用下一个拦截器类的方法,这样就把整个不同的拦截器变成一个完整的闭环的一个拦截器列。所以不管是同步还是异步都会调用getResponswWithInterceptor()来完成里面的操作,实现遍历循环 

最后会调用finish这个方法,意思就是执行完这个请求之后,要将这个请求从调度器中移除,最后返回。

总结 okhttp同步请求:RealCall、拦截器、dispatcher调度器

1.生成了一个okhttpClient对象

    里面包含了很多对象,有很多其他的属性在构造函数当中复默认值dispatcher()

2.创建request对象和response对象     

        对于okhttp里面的请求和响应

3.通过call对象来操作请求

        可以看到call是一个接口,就要用实现类RealCall完成具体的同步请求工作

4.RealCall

① realcall只能被调用一次,如果调用过一次再次调用会抛出异常

②okhttp内部调度器会将同步请求添加到队列当中

③okhttp会通过拦截器列做实际的网络请求工作

5.执行完毕之后将同步请求从Dispatcher中移除

相关文章

网友评论

      本文标题:Okhttp同步请求

      本文链接:https://www.haomeiwen.com/subject/dffqtctx.html