Android的网络编程
HTTP通信方式、Socket通信方式
HTTP的简介:
首先HTTP全称是Hyper Text Transfer Protocol,翻译过来叫超文本传输协议,看起来很高端的名字,实际上他就是字面意思,就比如你想知道“HTTP协议是什么”,服务器上呢有个超文本,就姑且当他是个记事本里面记录着“HTTP协议是什么”的答案,你想要,那么服务器就和你约定好了用“顺丰快递传”,所以这就是传输超文本的协议。
第二它是一个属于应用层的协议,什么叫应用层,简单说就是和应用进程交互 的层,想想应用里面有什么好交互的,当然是数据了,也就是说这一层解决的是如何包装数据的。
特点
C/S模式,快递员服务于客户。
简单:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。
快速:由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。但是这种方式在请求频繁的条件下,将会在建立和断开连接上花费大部分时间,所以在1.0、1.1持久连接变为了默认连接方式,有兴趣的可以自己查一下这个方式。
无状态:HTTP协议是无状态协议。无状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
Android p的http网络请求的问题
Android p 要求默认使用加密连接,禁止App使用任何未加密的连接,需要使用TLS传输层安全协议,也就是Https
更改网络安全配置
在res新增xml目录,创建network_security_config.xml,开启http请求。
在AndroidManifestxml中的application标签增加以下属性
Android的Https
自定义X509TrustManager
在使用HttpsURLConnection发起HTTPS请求的时候,提供了一个自定义的x509T rus tManager,未实现安全校验逻辑
如果不提供自定义X509TrustManager,代码运行起来可能会报异常
自定义HostnameVerifier
在握手期间,如果URL的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。
URL类
统-资源定位符(URL) 是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, 是互联网上标准资源的地址
互联网上的每个文件都有一个唯一 的URL
URL类提供了多个构造器用于创建URL对象
URL类提供多个方法访问URL对应的资源:
URLConnection openConnection( ):返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。
InputStream openStream(): 打开此URL的连接,并返回一个用于读取该URL资源的InputStream。
Android常用的网络编程框架
OkHttp 简介
1 OKhttp的优势:
(1)允许连接到同一个主机地址的所有请求,提高请求效率
(2)共享Socket,减少对服务器的请求次数
(3)通过连接池,减少了请求延迟
(4)缓存响应数据来减少重复的网络请求
(5)减少了对数据流量的消耗
(6)自动处理GZip压缩
1 OKhttp的功能:
(1)get,post请求
(2)文件的上传下载
(3)加载图片(内部会图片大小自动压缩)
(4)支持请求回调,直接返回对象、对象集合
(5)支持session的保持
HTTP get 异步请求
1:异步请求方式,请求的回调会在子线程里,所以如果需要更新UI你需要切换到主线程。且你不需要在new 一个线程包裹这个异步请求了。
2:在异步请求方法里,请不要将 public void onResponse(Call call, final Response response)回调里的response回调数据放到UI线程里解析,因为有一个天坑,有可能在UI线程里解析的时候response里面却还没有塞入数据(我也觉得很神奇,不知道写okhttp的公司是怎么想的,为什么不处理完所有数据在提供回调)。
Post请求
图片加载框架Glide
Glide是一款图片加载框架,可以在Android平台上以简单的方式加载和展示图片。
Glide集成okHttp加载https图片
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
}
Glide加载https图片
第一步、定义一个带https的请求
第二步:定义ModelLoader和ModelLoader.Factory
第三步、ModelLoader的getResourceFetcher返回一个DataFetcher,我们给它传入一个OkHttpClient实例,让它通过OkHttpClient发起请求
第四步、自定义一个GlideModule,在OkHttpsGlideModule中进行关联
第五步、在AndroidManifest.xml中的
Volley功能有:
JSON,图像等的异步加载;
网络请求的排序;
网络请求的优先级处理;
图片缓存;
多级别取消请求;
和Activity生命周期的联动(Activity结束时同时取消所有网络请求)等。
Volley加载网络图片:
ImageLoader
用法:
1. 创建一个RequestQueue对象。
2. 创建一个ImageLoader对象。
3. 获取一个ImageListener对象。
4. 调用ImageLoader的get()方法加载网络上的图片。
ImageRequest
用法:
1. 创建一个RequestQueue对象。
2. 创建一个Request对象。
3. 将Request对象添加到RequestQueue里面。
NetworkImageView
用法:
1. 创建一个RequestQueue对象。
2. 创建一个ImageLoader对象。
3. 在布局文件中添加一个NetworkImageView控件。
4. 在代码中获取该控件的实例。
5. 设置要加载的图片地址。