一、Okhttp的Get请求
1、创建OkHttpClient
要创建get请求,首先要创建一个OkHttpClient类,这个类其实是一个OkHttp请求客户端类,在整个Okhttp网络请求中,这个类处于一个核心地位,很多功能都需要这个客户端类进行转发或者直接由这个客户端类进行实现。它的创建主要有两种方法,一种是默认的,直接通过new OkHttpClient()进行实例化;第二点就是,现实情况中,网络请求其实是比较复杂的,这时候就可能涉及一些参数,这时候就要用到第二种方法,这时就需要用到OkHttpClient中的一个内部类build参数的设置
builder其实是okhttpclient中的一个静态内部类。内部类中的第一行Dispatcher,它是OkHttpClient中的核心之一,分发器。这个分发器的作用是什么?它会接收到我们的同步或异步请求队列,然后根据锁条件,进行相应的同步或者异步请求的分发。
通过builder模式设置好请求以后,就可以通过okhttpclient的build模式来完成整个okhttpclient对象的创建。
2、创建Request
Request其实代表的是请求暴漏的信息,发送http请求,肯定有request、response等常用的url地址,请求的方法get、post等等,还有他可以设置请求头,比如content type、cookie等等。一般情况下,Request也是通过build模式所创建的。
3、创建Call对象
Call对象代表了一个实际的Http请求,Request代表了连接Request和Response的一个桥梁。通过client.newCall(request)方法,将request作为参数传递过去,创建好call对象。这其实是同步和异步的分水岭。同步和异步前三步都是一样的,第四步通过call执行同步和异步的方法就不一样了
4、获取Response
通过call.execute()方法获取response响应报文的读取,Resoponse代表了响应报文的信息,比如状态码、响应头、响应体等等。同时,同步请求和异步请求最大的区别是在这里,同步调用的是execute()这个方法
5、
call()其实是一个接口,具体的实现其实是在realcall中实现的,所以说,我们调用的是call.execute(),其实调用的是reacall.execute()中执行的。
6、
7、
发送请求,要创建报文request,通过request的newCall()方法,创建好实际的http请求Call,而call本身又是一个接口,所以说它的实现会在它的具体实现类realcall当中。然后需要判断它执行的是realcall的execute()方法还是enqueue()方法来进行同步和异步请求的区别。不管是同步还是异步请求,最终都会进入到getResponseWithInterceptorChain()方法中,这个方法其实是Okhttp的核心方法之一。这个方法内部其实是构建了一个拦截器的链,通过依次执行这个拦截器链中的每一个链来获取服务器的数据返回。getResponseWithInterceptorChain()和Dispatcher都是okhttp的核心之一。