OkHttp的基本使用(一)Get请求
·
- 简介
其强大的功能可以从2个方面进行说明:
- 更快:网络请求速度更快,支持HTTP/2技术,提升网络请求速度。当在HTTP/2不可用的情况下,会采用连接池,减少请求延迟,从而提高请求速度。
- 更省:更省流量,通过GZIP对数据进行压缩并结合缓存机制,从而压缩下载数据的大小、并且在一定的时效内缓存请求的数据,减少短时间内多次请求的流量消耗。
- 使用前配置
其次,在Module的build.gradle文件中添加如下代码,完成导包。(注意:写此篇文章时OkHttp的最新版本是3.2.0,在真实使用的时候,请到官网下载最新的包)
- Get同步请求
其中需要注意的问题:
- response.body().string();一个请求只能获取一次数据,所以如果要对结果进行复用,可以先将结果存放到一个局部变量中,比如文中的result。官方文档有这么一句话:The response body can be consumed only once.翻译:一个response body只能被消耗(使用)一次。
- response.body().close();请求结束之后,建议将body()关闭。官方文档描述:The response body must be closed. 之所以要关闭body,可以看一下close方法的源码。其中其实是在释放网络资源,关闭网络流。
- 如果是在new Thread中执行的上述代码,切记要使用Handler将结果返回主线程后进行UI的更新。
- Get异步请求
以上就是异步Get请求,和同步请求代码不一样的地方就是enqueue这句okHttpClient.newCall(request).enqueue()。和同步请求不同,异步请求开启了新的线程执行网络请求的代码。也就是说okHttpClient.newCall(request).enqueue()这句是可以在UI线程中直接执行,并且将结果返回到Callback中的onResponse方法中。同样在onResponse方法中通过 response.body().string()获取结果,之后关闭body:response.body().close()。
异步请求的说明:上面我已经提到过,异步请求时开启了一个新的线程执行网络请求,那既然是开启线程就涉及到线程的管理,就要使用到线程池。在OkHttp的异步请求中也是有线程池的,关于这部分的讲解,我会在后面的源码分析中详细的说明。
在开发中可能也有人这样写:new Request.Builder().get().url(Config.URL).build()。可以看到其中多了一个get()方法。此方法的源码如下:
也就是设置了一个Get请求的方式。其实不写get()方法,Buidler对象默认就是Get方式,通过Buidler构造器源码一目了然:
注意第2行代码,默认设置为GET请求。
所以平时在使用Get方式请求的时候,即使不调用get()方法也是可以的。
更多推荐
已为社区贡献2条内容
所有评论(0)