GET方式和POST方式提交数据
HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式。其中最常用的两种请求方式是GET和POST。
GET方式与POST方式的区别
GET方式以实体的方式得到由请求URL所指向的资源信息,向服务器提交的参数跟在请求URL后面。使用GET方式访问网络URL的长度是有限制的,请求URL的长度要小于1K。
POST方式用来向目的服务器发出请求,要求它接收被附在请求后的实体。它向服务器提交的参数在请求后的实体中,POST方式对URL的长度是没有限制的。
使用HttpConnection
URL : 包含请求地址的类
URL(path) : 包含请求路径的构造方法
openConnection() : 得到连接对象
HttpURLConnection : 代表与服务器连接的类
setRequestMethod(“GET/POST”) : 设置请求方式
setDoInput(true/false):设置可以读取服务器端返回的数据
setDoOutput(true/false):设置可以向服务器端写入数据
setConnectTimeout(time) : 设置连接超时时间, 单位为ms
setReadTimeout(time): 设置读取服务器返回数据的时间
connect() : 连接服务器
int getResponseCode(): 得到服务器返回的结果码
Int getContentLength() : 得到服务器返回数据的长度(字节)
getOutputStream() : 返回一个指向服务器端的数据输出流
getInputStream() : 返回一个从服务器端返回的数据输入流
disconnect() : 断开连接
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
客户端(浏览器端)与服务器端交互:xml json
本质就是具有特定格式的字符串
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 jsonArr = “[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]
{“name”:”TOM”, “age”:12} {“aa”:“a”, [3]}
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 : 能解析json数据的类
Gson() : 构造对象的方法
String toJson(Object src) : 将对象转换为对应格式的json字符串
T fromJson(String json, Type typeOfT) : 解析Json字符串, 得到对象
TypeToken : 用来得到Type的类
protected TypeToken() : 受保存的构造方法
Type getType() : 得到类型对象
测试
测试解析{ }
1.格式:
{
“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”
}
]
2.解析
2.1 原生API JSONObject
JSONObject json=new JSONObject(str); String obj=json.getString(“weatherinfo”); JSONObject json2=new JSONObject(obj); System.out.println(json2.getString(“city”));
2.2 Gson
引入类库到工程:创建json对应的对象实体类
Gson gson=new Gson(); Weatherinfo w= gson.fromJson(str,Weatherinfo.class); //类型 //对象数组 //List list = gson.fromJson(str,new TypeToken<List> (){}.getType());
2.3 Fastjson
List list =JSON.parseArray(str,Weatherinfo.class); for(Weatherinfo w:list){ System.out.println(“转换结果=”+w); }