OkHttp 同步请求

OkHttp 同步请求_第1张图片
image

第一步:创建 OkHttpClient 对象(OkHttpClient代表是客服端类)

两种创建方式

1:默认的,直接 new OkHttpClient() 对象

OkHttpClient client = new OkHttpClient(); 

2:考虑到实际开发中网络情况是比较复杂的,在创建的时候就需要设置一些参数,就需要通过 OkHttpClient 内部类 BuilderBuilder() 构造方法实例化一些参数,进行参数的设置。

okHttpClient=new OkHttpClient.Builder()
                .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
                .readTimeout(IO_TIMEOUT, TimeUnit.SECONDS)
                .writeTimeout(IO_TIMEOUT, TimeUnit.SECONDS)
                .addNetworkInterceptor(new StethoInterceptor())//google Chrome 查看请求信息 日志
                .addInterceptor(new RequestInterceptor())//请求头
                .build();

我们可以通过 Builder() 构造方法点进去看 ===>


OkHttp 同步请求_第2张图片
QQ截图20180727095521.png

OkHttp 同步请求_第3张图片
QQ截图20180727101514.png

在通过 Builder() 构造方法设置好了参数以后,就可以调用 OkHttpClient中的 build() 方法完成 整个的 OkHttpClient 对象的创建。


OkHttp 同步请求_第4张图片
image.png

第二步:同样以Builder的模式创建了 Request 对象

Request 就是我们发送请求的报文信息,包含了

  • 请求的 Url 地址
  • 请求的方法 method(get,post...等等)
  • 请求头 Header
  • 请求参数 RequestBody
    ...等等。
Request request = new Request.Builder()
                .url("www.baidu.com")
                .get().build();

通过上面代码可以看出 Request 也是通过 Builder 模式进行创建的。


OkHttp 同步请求_第5张图片
QQ截图20180727105529.png

最后再调用 Request 中的 build() 方法创建出 request 对象。

第三步:创建 Call 对象(将创建的request封装成了Call对象)

就会想到什么是 Call 对象,我们可以把 Call当作连接 RequestResponse 连接的桥梁.
我们通过 OkHttpClientnewCall(Request request) 方法并把创建好的 request 作为参数传进去,从而创建好我们的 call 对象

Call call=client.newCall(request);

第四步:通过 call 对象来进行同步或者异步的调用(调用Call的execute()发送同步请求)

这其实是同步请求和异步请求的分水岭,同步和异步前三步其实都是一样的。但是在第四部通过 call 来进行同步和异步的方法调用就不一样了。

        try {
            Response response = call.execute();
        } catch (IOException e) {
            e.printStackTrace();
        }

我们通过 call.execute(); 来实现OkHttp的同步请求。 完成 Response 相应报文的读取。
Response 包含了状态码,相应头,响应信息,相应体...等等:


OkHttp 同步请求_第6张图片
image.png

OkHttp同步需要注意

  • 发送请求后,就会进入阻塞状态,直到收到响应为止。---->当前线程如果发送了同步请求之后,它就会进入阻塞,直到数据有响应为止,它才会停止阻塞。

你可能感兴趣的:(OkHttp 同步请求)