第九章:网络编程

9.1网络编程入门
9.1.1HTTP协议简介
HTTP协议即超文本传输协议,它规定了浏览器和万维网服务器之间互相通信的规则。
在这里插入图片描述

  • 一次HTTP请求的过程:建立连接;发送请求;处理请求;返回数据;发送请求2……关闭连接
  • HTTP请求的常用方式:GET;POST
  • HTTP请求的格式:请求行;请求头;请求体
  • HTTP响应的格式:响应行(包含响应码:200 404 500 302);响应头;响应体

9.1.2使用HTTPConnection
1.URL:包含请求地址的类

  • URL(path):包含请求路径的构造方法
  • openConnection():得到连接对象

2.HttpURLConnection:代表与服务器连接的类

  • setRequestMethod(“GET/POST”):设置请求方式
  • setDoInput(true/false):设置可以读取服务器端返回的数据
  • setDoOutput(true/false):设置可以向服务器端写入数据
  • setConnectTimeout(time):设置连接超时时间,单位为ms
  • setReadTimeout(time):设置读取服务器返回数据的时间
  • connect():连接服务器
  • int getResponseCode():得到服务器返回的结果码
  • int getContentLength():得到服务器返回数据的长度(字节)
  • getOutputStream():返回一个指向服务器端的数据输出流
  • getInputStream():返回一个从服务器端返回的数据输入流
  • disconnect():断开连接

9.1.3Handler

  • Handler主要用于发送消息和处理消息。一般使用Handler对象的sendMessage()方法发送消息,消息经过一系列处理后,最终会传递到Handler的handlerMessage()方法中。
  • 发送及时消息:sendMessage(Message msg)
  • 发送延时消息:sendMessageDelayed(Message msg,long time)
  • 处理消息:handleMessage(Message msg)(回调方法)
  • 移除还未处理的消息:removeMessages(int what)

9.1.4Handler消息机制
Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用Handler的sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Handler的handleMessage()方法中。
在这里插入图片描述

1.MessageQueue

  • MessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。它是一个按Message的when排序的优先级队列。(when:代表着被处理的时间)

2.Looper

  • Looper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会进入到一个无线循环中。然后一发现MessageQueue中存在一条消息,就会将他取出,并传递到Handler的HandlerMessage()方法中。

使用Handler的一般步骤
1.创建Handler成员变量对象,并重写其handleMessage()
2.在分/主线程创建Message对象
3.使用handler对象发送Message
4.在handleMessage()中处理消息

9.1.5AsyncTask

  • 为了方便子线程中对UI进行操作,Android提供了一些好用的工具类,AsyncTask就是其中之一。借助AsyncTask,可以十分简单地从子线程切换到主线程,它的原理也是基于异步消息处理机制的。
  • AsyncTask是一个抽象类,它有三个泛型参数,分别如下
  • Params:执行异步任务时需要传入的参数,用于在后台任务中使用;
  • Progress:后台任务执行时,如果需要在界面上显示当前的进度,则使用该参数作为进度单位;
  • Result:当任务执行完毕后,如果需要对结果进行返回时,则使用该参数作为返回值类型。

9.2.1HttpURLConnection的基本用法
在实际开发中,绝大多数的App都需要与服务器进行数据交互,此时就需要用到HttpURLConnection,他是一个标准的java类。需要注意的是,在使用HttpURLConnection对象访问网络时,需要设置超时时间,在网络异常的情况下,会取不到数据面而一直等待导致程序僵死不往下执行。

9.3数据提交方式
9.4.1GET方式和POST方式提交数据

  • HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式。其中最常用的两种请求方式是GET和POST。
  • GET方式与POST方式的区别
  • GET方式以实体的方式得到由请求URL所指向的资源信息,向服务器提交的参数跟在请求URL后面。使用GET方式访问网络URL的长度是有限制的,请求URL的长度要小于1K。
  • POST方式用来向目的的服务器发出请求,要求它接受被附在请求后的实体。他向服务器提交的参数在请求后的实体中,POST方式对URL的长度是没有限制的。

9.4JSON
什么是JSON?

  • JSON是一种轻量级的数据交换格式
  • 客户端(浏览器端)与服务器端交互:xml ison
  • 本质就是具有特定格式的字符串
  • JSON数据已经是客户端与服务器端交互的最常用的选择,已经很少使用xml来进行数据交互了

JSON数据格式

  • 整体结构:String json1="{“id”:12,“name”:“Tom”}";String json2="[{“id”:12,“name”:“Tom”},{“id”:12,“name”:“Tom”}]";
  • Json数组:[] ArrayList
  • Json对象:{} HashMap
  • Json数组的结构:[value1,value2,value3]
  • Json对象的结构:{key1:value1,key2:value2,key3:value}
  • key的数据类型:字符串
  • value的数据类型:
  • 数值(包含整数和小数)
  • 字符串;null
  • json数组[]String jsonArr="[value1,value2,value3,value4]";"[1,2,3]"
  • json对象{}String jsonObject="{key1:value1,key2:value2,key3:value3}";

JSON数据解析

  • 解析技术
  • Android原生API:编程相对麻烦
  • Gson框架:编码简洁,项目首选
  • 解析方向
  • 服务器端:将java对象(包含集合)转换为json格式字符串
  • 客户端:将json格式字符串转换为java对象(包含集合)

相关API

  • Android原生API:

  • JsonObject类:json对象{}

  • JsonObject( String json):将json字符串解析为json对象

  • Xxx getXxx(String name):根据name,在json对象中得到对应的 Value

  • JsonArray类:json数组[]

  • JSONArray(String json):将json字符串解析为json数组

  • int length():得到json数组中元素的个数

  • Xxx getXxx(int index):根据下标得到json数组中对应的元素数据

  • Gson框架API

  • Gson:能解析son数据的类

  • Gson():构造对象的方法

  • String to]son(Object src):将对象转换为对应格式的json字符串

  • T fromJson(String json,Type typeOfT):解析Json字符串,得到对象TypeToken<T>:用来得到Type的类

  • protected TypeToken0:受保存的构造方法

  • Type getType():得到类型对象

9.5开源项目
AsyncHttpClient的使用

  • 在 Android开发中,发送、处理HTTP请求十分常见,如果每次与服务器进行数据交互都需要去开启一个子线程,这样是非常麻烦的。为了解决这个问题,一些开发者开发出了开源项目AsyncHttpClient。
  • AsyncHttpClientl是对 HttpClient的再次包装AsyncHttpClient的特点有,发送异步HTTP请求、HTTP请求发生在UI线程之外、内部采用了线程池来处理并发请求,而且它使用起来比 HttpClient更加简便。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值