对于json数据,我们需要进行解析并封装为对象,Gson只需要传入空对象(包含所有字段),就可以将json字符串转化为modal,同时,modal也可以通过Gson转变为json数据。
1、json转对象:
该方法通过Xutils从服务器端获取数据并解析封装为对象:其中orderList为集合,对象ListView中adapter的数据。
private void getDataList() {
datas = new ArrayList<OrderItem>();
RequestParams params = new RequestParams();
params.addHeader("Authorization", "Bearer " + Constants.access_token);
HttpUtils httpUtils = new HttpUtils();
httpUtils.send(HttpRequest.HttpMethod.GET, Constants.baseURL
+ "farmers/" + Constants.userID + "/orders?page=2", params,
new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
Log.e("=====json 获取数据失败", arg1);
}
@Override
public void onSuccess(ResponseInfo<String> response) {
Log.e("我的订单=====json数据", response.result);
Gson gson = new Gson();
OrderList bean = gson.fromJson(response.result,
OrderList.class);
/* String json = gson.toJson(bean);
Log.e("我的订单=====转json ok", json);*/
datas = bean.content;
setAdapter();
Log.e("我的订单=====解析成功", response.result);
}
});
}
原json数据:
{
"content": [
{
"items": [
{
"serviceName": "葛淑英创建的"
}
],
"orderNum": 2865023853,
"putOrderTime": "2015-08-01 14:47:12",
"state": "已取消"
},
{
"items": [
{
"serviceName": "为黄氏而建"
}
],
"orderNum": 3834137140,
"price": "¥ 12300.00",
"putOrderTime": "2015-08-01 14:44:09",
"state": "已完成"
},
{
"items": [
{
"serviceName": "为黄氏而建"
}
],
"orderNum": 2930952581,
"putOrderTime": "2015-08-01 13:58:35",
"state": "已取消"
},
{
"items": [
{
"serviceName": "播种"
},
{
"serviceName": "测土"
}
],
"orderNum": 4828959701,
"putOrderTime": "2015-08-01 13:03:33",
"state": "已取消"
},
{
"items": [
{
"serviceName": "播种"
}
],
"orderNum": 4275681450,
"price": "¥ 1230.00",
"putOrderTime": "2015-06-24 10:48:18",
"state": "已完成"
}
],
"first": false,
"last": true,
"number": 2,
"numberOfElements": 5,
"size": 10,
"totalElements": 25,
"totalPages": 3
}
对应的bean对象:
orderList.java
package com.irelint.stanleyagricultural.domain;
import java.util.List;
public class OrderList {
public List<OrderItem> content;
public class OrderItem{
public List<OrderDes> items;
public String orderNum;
public String putOrderTime;
public String state;
public String price;
}
public class OrderDes{
public String serviceName;
public String imgUrl;
}
}
如果json数据是集合而不是对象,则可以按如下方案(其中FarmerService封装的是集合中的对象):
Type type = new TypeToken<LinkedList<FarmerService>>(){}.getType();
Gson gson = new Gson();
private LinkedList<FarmerService> farmerServices = gson.fromJson(response.result, type);