第二十六节课
Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用Hanlder的sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Hanlder的handleMessage()方法中。
AsyncTask
为了方便子线程中对UI进行操作Android提供了一些好用的工具类,AsyncTask就是其中之一。借助AsyncTask,可以十分简单地从子线程切换到主线程,它的原理也是基于异步消息处理机制的。
AsyncTask是一个抽象类,它有三个泛型参数.分别如下所示:- Params:执行异步任务时需要传入的参数,用于后台任务中使用;
- Progress:后台任务执行时.如果需要在界面上显示当前的进度.则使用该参数作为进度单位;
- Result:当任务执行完毕后.如果需要对结果进行返回时,则使用该参数作
为返回值类型;
第二十七节课
使用HttpConnection
- URL:包含请求地址的类
- URL(path :包含请求路径的构造方法-operConnectiono:得到连接对象
2ttnURLConnection:代表与服务器连接的类
setRequestJethod(“GET/POST ):设置请求方式
setDoInput(true/false):设置可以读取服务器端返回的数据seTDoOutput(true/false):设置可以向服务器滑写入数据setConnectTimeout(time):设置连接超时时间,单位为mssetReadTimeout (time):设置读取服务器返回致据的时间connecto :连接服务器 - int getResponseCodeO:得到服务器返回的结果码
Int getContentLenPtho:得到服务器返回数据的长度(字节)getOutputStreamO:返回一个指向服务器端的数据输出流getInputStreamO:返回一个从服务器端返回的数据输入流disconnecto:断开连接
Handler消息机制
·在使用手机下载软件时.通常都能在界面上看到一个下载的进度条.这个进度条用来表示当前下载的进度。但是Android4.0以后不能在UI线程访问网络,而子线程也不能更新UI界面。为了根据下载进度实时更新UI界面,就需要用到Handler消息机制来实现线程间的通信。 - Handler机制主要包括四个关键对象。分别是:Message、Handler.MessageQueue、Looper。
.JSON(JavaScript 0bject Notation)是一种轻量级的数据交换格式·客户端(浏览器端〉与服务器踏交互: xmljson
·本质就是具有特定格式的字符串
JSON数据已经是客户端与服务器端交互的最常用的选择,已经很少使用xml来进行数据交互了
JSON数据格式
整体结构: String json1 = “"“id” : 12,“name”:“Tom"Y”;
String json2 =“[“id”: 12,“name”: “Tom”}), {id” : 12,“name”:“Tom”}";
Json数组:[]>ArrayList
Json对象:{}>HashMap
Json数组的结构: [value1, value2, value3]
Json对象的结构: fkey1:value1, key2:value2, key3:value3}key的数据类型:字符串
value的数据类型:
·数值(包含整数和小数)·字符串
.null
json数组[String jsonArr =“[value1,value2,value3,value4]";“[1,2,3]”
json对象String jsonObject =“fikey1:value1,key2:value2,key3:value3)”;
例子:
[1,“ab",[],i"n":123,“b”:“abc"H[1, “a”:3]“name”:”“TOM”,“age”:12}f“aa":"“a”,[3]}
JSON数据解析
·解析技术: - Android原生API:编程相对麻烦.Gson框架:编码简洁,项目首选
·解析方向:
·服务器端:将java对象(包含集合)转换为json格式字符串·客户端:将json格式字符串转换为java对象(包含集合)
测试
-测试解析{}
“id:2, ““name”:”“大虾””,“price”:12.3,
“imagePath”":“http://192.168.10.165:8080/L05_Server/images/f1.jpg”
。测试解析[]
[
{
“id”":1, “name”:“大虾1"”,“price”:12.3,
“imagePath”":“http://192.168.10.165:8080/f1.jpg”
},
{
“id”":2, “name”":“大虾2"”,“price”:12.5,
“imagePath”:"“http://192.168.10.165:8080/f2.jpg”
)
相关API
Android原生API: - JsonObject类: ison对象{}
-JSONObject(String ison):将json字符串解析为json对象
-Xxx getXxx(String name):根据name,在json对象中得到对应的Value-JsonArray类: json数组0
JSONArray(String ison):将json字符串解析为json数组int length(:得到json数组中元素的个数
Xxx getXxx(int index):根据下标得到json数组中对应的元素数据
Gson框架API
TGson :能解析json数据的类
Gson():构造对象的方法
String toJson(Object src):将对象转换为对应格式的json字符串- TfromJson(String json,Type typeofT):解析Json字符串,得到对象- TypeToken:用来得到Type的类
protected TypeToken():受保存的构造方法Type getType():得到类型对象
9.1.2 Handler消息机制
·使用Handler的一般步骤
1.创建Handler成员变量对象,并重写其handleMessage()2.在分/主线程创建Message对象
3.使用handler对象发送Message4.在handleMessage()中处理消息
**2.1原生APl JSONObject
sONObject json=new sON0bject(str);string obj=json.getstring("“weatherinfo”");sONObject json2=new sONobject(obj);
system.out.println(json2.getstringc"“city”"));
2.2 Gson
引入类库到工程:创建json对应的对象实休类
Gson gson=new Gson;
iweatherinfo w= gson.fromison(str , weatherinfo.c1ass);/类型
//对象教组
//Listcweatherinfo> list = gson.from]son(str,new TypeToken<List>().getTypeO;
2.3 Fastjson
List list =5ON.parseArray(str , weatherinfo.class);for (iweatherinfo w: 1ist)f
System.out.printTnC"转换结果=""+w);
**