android gson.fromjson 复杂对象,Android笔记:gson处理多层嵌套的复杂形式的json

这段代码展示了如何通过HTTP POST方法从服务器获取房间参数信息。它创建JSON对象作为请求参数,设置请求头,发送POST请求,并处理返回的JSON数据,将结果转化为`House`对象。如果请求成功,会返回房间信息;否则,根据状态码和异常信息处理错误。
摘要由CSDN通过智能技术生成

/*** 获取当前房间参数信息

*

*@paramhouseid 房间ID

*@paramhashmap 成功失败标志

*@return返回House参数信息

*@throwsUnsupportedEncodingException

*@throwsJSONException*/@SuppressWarnings("finally")public static House GetHousePars(inthouseid,

HashMaphashmap)throwsUnsupportedEncodingException, JSONException {

Log.i(tag, STRUrl);int flag = 0;

House ur= null;

String tag= "httppost";

Log.i(tag,"获取房间信息");//设置服务地址

String Url = STRUrl + "InteWebService.asmx/GetHouse";

HttpPost request= new HttpPost(Url);//定义一个HTTP请求

request.addHeader("Content-Type", "application/json; charset=utf-8");//设置返回的内容为json格式//Post参数传递 JSON格式

JSONObject jsonParams = newJSONObject();

jsonParams.put("houseid", houseid);//传参,如果想传递两个参数则继续添加第二个参数jsonParams.put("param2Name","param2Value")

Log.i(tag, "houseid=" +houseid);

HttpEntity bodyEntity= new StringEntity(jsonParams.toString(), "utf8");//参数必须也得是JSON数据格式的字符串才能传递到服务器端,否则会出现"{'Message':'strName是无效的JSON基元'}"的错误

request.setEntity(bodyEntity);

HttpClient httpClient= newDefaultHttpClient();

String res= "";try{

Log.i(tag,"开始执行请求GetHousePars");

Log.i(tag, Url);

HttpResponse response=httpClient.execute(request);int state =response.getStatusLine().getStatusCode();

Log.i(tag,"返回状态" +state);if (state == 200) {//200表示连接成功 404 连接失败

Log.i(tag, "状态200连接成功");

HttpEntity entity= response.getEntity();//获取返回结果

res =EntityUtils.toString(entity);

Log.i(tag, res);

GsonBuilder gsonb= newGsonBuilder();//Json中的日期表达方式没有办法直接转换成我们的Date类型, 因此需要单独注册一个Date的反序列化类.

DateDeserializer ds = newDateDeserializer();//给GsonBuilder方法单独指定Date类型的反序列化方法

gsonb.registerTypeAdapter(java.util.Date.class, ds);

Gson gson=gsonb.create();

JSONObject resultJSON= newJSONObject(res);

String data= resultJSON.get("d").toString();

Log.i(tag, data);if ("null" !=data) {

Log.i(tag,"返回不为null开始转换");//登录成功 返回用户信息 注意时间格式的提取

ur = gson.fromJson(data, House.class);if (ur != null) {

flag= 1;

hashmap.put("flag", flag);returnur;

}

}else{//没有返回用户信息

Log.i(tag, "返回为null");

flag= 0;//房间信息不存在

hashmap.put("flag", flag);}

}else{

flag= 2;//网络连接异常

hashmap.put("flag", flag);

Log.i("httppost", "连接失败"

+response.getStatusLine().getStatusCode());

}

}catch(Exception e) {

flag= -1;//程序异常

hashmap.put("flag", flag);

Log.i("httppost", "获取信息异常" +e.getMessage());

}finally{

hashmap.put("flag", flag);

Log.i("httppost", "关闭try");returnur;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值