OkHttp 同步请求

image
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() 构造方法点进去看 ===>


QQ截图20180727095521.png

QQ截图20180727101514.png

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


image.png

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

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

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

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


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 包含了状态码,相应头,响应信息,相应体...等等:


image.png

OkHttp同步需要注意

  • 发送请求后,就会进入阻塞状态,直到收到响应为止。---->当前线程如果发送了同步请求之后,它就会进入阻塞,直到数据有响应为止,它才会停止阻塞。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容