Android的网络编程

Android的网络编程

网络的基本概念

网络的基本知识
IP地址和端口号

IP地址:网络中每台计算机都有唯一的IP地址作为标识
端口号:计算机中正在运行的进程

网络协议在这里插入图片描述

OSI七层模型:应用层表示层会话层传输层网络层数据链路层物理层
TCP/IP概念模型:应用层传输层网络层链路层

HTTP 协议

属于应用层的面向对象的协议,适用于分布式超媒体信息系统主要特点

  • 支持C/S模式
  • 简单快速:只需传送请求方法和路径,请求方法常用的有: GET、HEAD、POST等●灵活:允许传输任意类型的数据对象,用Content -Type进行标记.
  • 无连接:限制每次连接只处理一个请求.
  • 无状态:对事务处理没有记忆功能.
    HTTP的URL的格式:
  • http://host[: port][/path]
  • http表示要通过HTTP协议来定位网络资源; host表示合法的Internet主机域名或者IP地址; port指定一个端口号, 为空则使用默认端口80; path指定请求资源的URI。

HTTP请求报文

  • 由请求行、请求报头、空行和请求数据4个部分组成

HTTP相应报文

  • 由状态行、消息报头、空行、响应正文组成

HTTPS请求在这里插入图片描述

HTTPS的请求过程在这里插入图片描述

HTTP与HTTPS的区别

  • 端口不同:Http 与 Http 使用不同的连接方式,用的端口也不一样,前者是 80,后者是 443;
  • 资源消耗:和 HTTP 通信相比,Https 通信会由于加减密处理消耗更多的 CPU 和内存资源;
  • 开销:Https 通信需要证书,而证书一般需要向认证机构购买;
  • Https 的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

Android的网络访问

通信方式
Http通信方式(HttpURLConnection、HttpClient
  • HttpURLConnection
    Android 2.3之后,HttpURLConnection是Android网络编程的最佳选择,它的API简单,体积较小,压缩和缓存机制有效减少网络访问的流量
  • HttpClient(自学)
    开发团队向开发者建议:在Android 2.2版本及以下可以使用HttpClient,在2.3以上版本则应该使用HttpURLConnection
  • Android 6.0直接删除了HttpClient类库
Socket通信方式
URL类
  • 统一资源定位符(URL):对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址
  • 互联网上的每个文件都有唯一的URL
  • URL类提供了多个方法访问URL对应的资源:
    URLConnection openConnection():返回一个URLConnection对象,表示到URL所引用的远程对象的连接
    InputStream openStream():打开URL的连接,返回一个用于读取该URL资源的InputStream
Android URL通信

在这里插入图片描述在这里插入图片描述

  • Android HTTP URL接口的基本操作:
  1. 创建URL以及HttpURLConnection对象
  2. 连接参数设置
  3. 连接到服务器
  4. 向服务器写数据
  5. 从服务器读取数据
HttpURLConnection在这里插入图片描述
  • HttpURLConnection访问HTTP资源的步骤:
  1. 根据URL地址创建URL对象
  2. 使用URL对象的openConnection()方法获取HttpURLConnection对象
  3. 设置连接的属性,包括GET/POST请求方式
  4. 输入、输出数据
  5. 关闭输入、输出流
  6. 在AndroidManifest配置文件中设置访问INTERNET的权限
  • HttpURLConnection使用的注意事项
  1. 使用setConnectionTimeout()方法设置连接超时,当网络不好时,Android Q系统会在超过设置时间后收回资源,中断操作
  2. 通过getResponseCode()对响应码进行判断,如果返回的响应码为200,则表示连接成功
  3. 对大文件操作时,将文件写到SDCard上,不要直接写到手机内存上
  4. 操作大文件时,要一边从网络上读取,一边往SDcard上写,减少手机内存的使用
  5. 对文件流操作完毕后要及时关闭
  6. Android4.0后所有的网络通信的操作都不能在主线程上进行,要用独立的线程完成

Android的网络框架

  • Volley:
  1. Google官方推出的异步请求库,支持HTTPClient、HttpURLConnection
  2. 基于网络队列,适合小数据频繁通信,请求线程池默认为4
  • OkHttp:
  1. 高性能的http库,支持同步、异步,而且支持http2、websocket协议,api简洁易用,实现了http缓存
  2. Android网络访问的源码已用OkHttp代替了HttpURLConnection
  • Retrofit:
  1. 基于OkHttp封装的一套RESTful网络请求框架,底层默认采用okHttp
  • Tips:目前网络框架的最好选择:Rxjava + Retrofit + OkHttp
Volley
  • Volley的组成:
  1. 网络请求(StringRequest,JsonArrayRequest,JsonObjectRequest,ImageRequest)。
  2. 图片加载 ImageLoader
  3. 自定义ImageView NetworkImageView
  • 调用在这里插入图片描述
OKHttp
  • 特点:
  1. OKHttp是Android版http客户端,非常高效,支持SPDY、连接池、GZIP和HTTP缓存
  2. 默认情况下,OKHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题
  3. 如果应用城西继承了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求
  4. 从Android4.4开始,HttpURLConnection的底层实现采用okHttp
OkHttp开发基本思路:
  • OkHttp的每次网络请求是一个Request,提供Request必要的参数url、header等,基于Request构造出一个Call对象,在调用它的execute()方法,就能取得Web Server回复的数据
  • 如果同步调用,需要在独立的线程中执行,使用异步调用,则采用回调的方式执行,在内部封装了一个请求队列
  • OkHttp依赖另一个组件okio完成高性能的I/O操作
    基本用法:
  1. 新建一个OkHttpClient对象
  2. 通过Request.Builder对象新建一个Request对象
  3. 通过Request对象构造Call对象,调用enqueue()以异步的方式将call加入调度队列,等待reqeuest执行完成
  4. 通过Call对象的Callback对象返回执行结果
Retrofit
  • 使用步骤:
  1. 添加Retrofit库的依赖:在这里插入图片描述
  2. 创建用于描述网络请求 的接口:
    在这里插入图片描述
  3. 创建Retrofit实例:
    在这里插入图片描述
  4. 发送请求:
    请求分为同步请求异步请求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值