gson處理多層巢狀的複雜形式的json
阿新 • • 發佈:2018-12-26
/** * 獲取當前房間引數資訊 * * @param houseid 房間ID * @param hashmap 成功失敗標誌 * @return 返回House引數資訊 * @throws UnsupportedEncodingException * @throws JSONException */ @SuppressWarnings("finally") public static House GetHousePars(int houseid, HashMap<String, Integer> hashmap)throws UnsupportedEncodingException, 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 = new JSONObject(); 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 = new DefaultHttpClient(); 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 = new GsonBuilder(); // Json中的日期表達方式沒有辦法直接轉換成我們的Date型別, 因此需要單獨註冊一個Date的反序列化類. DateDeserializer ds = new DateDeserializer(); // 給GsonBuilder方法單獨指定Date型別的反序列化方法 gsonb.registerTypeAdapter(java.util.Date.class, ds); Gson gson = gsonb.create(); JSONObject resultJSON = new JSONObject(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); return ur; } } 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"); return ur; } }