欢迎来到天天文库
浏览记录
ID:28516568
大小:445.42 KB
页数:8页
时间:2018-12-11
《安卓培训教程-Http的基本使用.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、一、简介OkHttp框架近2年是越来越火,当然跟其强大的功能是分不开的;需要注意的是OkHttp是一个基于Socket层面进行封装的框架,不像其他框架是在HttpUrlConnection基础上做了封装,OkHttp就是一个类似HttpUrlConnection的框架。其强大的功能可以从2个方面进行说明:更快:网络请求速度更快,支持HTTP/2技术,提升网络请求速度。当在HTTP/2不可用的情况下,会采用连接池,减少请求延迟,从而提高请求速度。更省:更省流量,通过GZIP对数据进行压缩并结合缓存机制,
2、从而压缩下载数据的大小、并且在一定的时效内缓存请求的数据,减少短时间内多次请求的流量消耗。OkHttp除了以上总结的2点之外,还在其他很多方面进行了进行了优化,详情可以查看官方文档。二、基本使用此篇文章主要介绍OkHttp的Get请求和Post请求的使用方式以及注意事项。1、使用前配置。首先,添加网络请求权限。其次,在Module的build.gradle文件中添加如下代码,完成导包
3、。(注意:写此篇文章时OkHttp的最新版本是3.2.0,在真实使用的时候,请到官网下载最新的包)compile'com.squareup.okhttp3:okhttp:3.2.0'2、Post和Get请求。Get同步请求以上是OkHttp的Get同步请求。其中请求核心的代码是client.newCall(request).execute();此句代码进行了网络请求,并且没有开新的线程;所以如果此句话是在UI线程中执行,会报错NetworkOnMainThreadException。所有在使用OkHt
4、tp的同步请求的时候,需要开启工作线程,将client.newCall(request).execute();放到工作线程中执行。其中需要注意的问题:response.body().string();一个请求只能获取一次数据,所以如果要对结果进行复用,可以先将结果存放到一个局部变量中,比如文中的result。官方文档有这么一句话:Theresponsebodycanbeconsumedonlyonce.翻译:一个responsebody只能被消耗(使用)一次。response.body().close
5、();请求结束之后,建议将body()关闭。官方文档描述:Theresponsebodymustbeclosed.之所以要关闭body,可以看一下close方法的源码。其中其实是在释放网络资源,关闭网络流。如果是在newThread中执行的上述代码,切记要使用Handler将结果返回主线程后进行UI的更新。同步请求在实际开发中的作用,可以利用OkHttp的同步请求方式,替换android中的HttpUrlConnection进行网络请求。Get异步请求异步请求,顾名思义就是开启新的线程执行网络请求,异
6、步请求和同步请求在代码上只有一句不同,废话不多说,看下面的代码:以上就是异步Get请求,和同步请求代码不一样的地方就是enqueue这句okHttpClient.newCall(request).enqueue()。和同步请求不同,异步请求开启了新的线程执行网络请求的代码。也就是说okHttpClient.newCall(request).enqueue()这句是可以在UI线程中直接执行,并且将结果返回到Callback中的onResponse方法中。同样在onResponse方法中通过respons
7、e.body().string()获取结果,之后关闭body:response.body().close()。异步请求的说明:上面我已经提到过,异步请求时开启了一个新的线程执行网络请求,那既然是开启线程就涉及到线程的管理,就要使用到线程池。在OkHttp的异步请求中也是有线程池的,关于这部分的讲解,我会在后面的源码分析中详细的说明。在开发中可能也有人这样写:newRequest.Builder().get().url(Config.URL).build()。可以看到其中多了一个get()方法。此方法的
8、源码如下:也就是设置了一个Get请求的方式。其实不写get()方法,Buidler对象默认就是Get方式,通过Buidler构造器源码一目了然:注意第2行代码,默认设置为GET请求。所以平时在使用Get方式请求的时候,即使不调用get()方法也是可以的。Post请求方式在介绍OkHttp的Post请求的基本使用之前,我们需要了解什么是Post,以及什么是Get?对于android程序员来说,对这2个概念不像web工程师那样熟悉,在这里我们先简要说明Pos
此文档下载收益归作者所有