AsyncTask
●为了方便子线程中对UI进行操作,Android提供了一些好用的工具类,AsyncTask就是其中之一-。借助AsyncTask, 可以十分简单地从子线程切换到主线程,它的原理也是基于异步消息处理机制的。
●AsyncTask是- 个抽象类,它有三个泛型参数,分别如下所示
●Params; 执行异步任务时需要传入的参数,用于后台任务中使用
●Progress: 后台任务执行时,如果需要在界面上显示当前的进度,则使用该参数作为进度单位
●Result: 当任务执行完毕后,如果需要对结果进行返回时,则使用该参数作为返回值类型
●JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
●客户端(浏览器端)与服务器端交互: 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:value3}
key的数据类型:字符串
●value的数据类型:
数值(包含整数和小数)
字符串
null
json数组[]
String isonArr = “[value1,value2,value3,value4]”; “[1,2,3]”
json对象{}
String jsonObject = “{key1:value1,key2:value2,key3:value3}”;
●例子:
[1,“ab",[], {“n”:123,“b":“abc”}] [1, “a":3]
{“nam"TOM”, “age”:12} {“a”,“a”, [3]}
解析技术:
●Android原生API :编程相对麻烦
●Gson框架:编码简洁,项目首选
解析方向:
●服务器端:将java对象(包含集合)转换为json格式字符串
●客户端:将json格式字符串转换为java对象(包含集合)
相关API
Android原生API:
●IsonObiect类:json对象{}
●JSONObject(String json) :将ison字符串解析为json对象
●Xxx getxxx(String name) :根据name,在json对象中得到对应的Value
●JsonArray类: json数组 []
●JSONArrayString json) :将ison字符串解析为json数组
int length() :得到json数组中元素的个数
●Xxgetxx(intindex):根据下标得到json数组中对应的元素数据
JSONobject json=new JSoNObject(str);
String obj=json. getstring("weatherinfo");
JsoNobject json2=new JsoNobject(obi) ;
System. out . printIn(json2. getstring("city"));
Gson框架API
●Gson: 能解析json数据的类
●Gson() :构造对象的方法
●String tolson(Object src) :将对象转换为对应格式的json字符串
●T fromJson(String json, Type typeOfT) :解析Json字符串,得到对象
●TypeToken :用来得到Type的类
●protected TypeToken() :受保存的构造方法
●Type getType():得到类型对象
引入类库到工程
Gson gson=new Gson() ;
weatherinfo w= gson . fromJson(str ,Weather info.class);
//类型
//对象数组.
//List<weatherinfo> list = gson.fromlson(str ,new TypeToken<List<weatherinfo>>(){}.getType());
●测试解析{}
//单个json
{
"id":2, "name":"大虾",
"price":12.3,
"imagePath":"http://192.168.10.165:8080/LO5_ Server/images/f1.jpg"
}
●测试解析[]
//数组json
[
{
"id":1, "name'":"大虾1",
"price":12.3,
"imagePath":"http://192.168.10.165:8080/f1jpg"
},
{
"id":2, "name":"大虾2",
"price":12.5,
"imagePath":"http://192.168.10.165:8080/f2.jpg" .
}