Gson+retrofit解析同一位置不同型別的json資料
阿新 • • 發佈:2019-02-01
至此,全域性的不同型別的json解析也完成了,如果有大神有更好的解決方式盼請指教啦~~public Object convert(ResponseBody value) throws IOException { //ResponseData中的流只能使用一次,我們先將流中的資料讀出在byte陣列中。這個方法中已經關閉了ResponseBody,所以不需要再關閉了 byte[] valueBytes = value.bytes(); JsonReader jsonReader = null, errorJsonReader = null; try {//try中的為正常流程程式碼 InputStreamReader charReader = new InputStreamReader(new ByteArrayInputStream(valueBytes), "UTF-8");//後面的charset根據服務端的編碼來定 jsonReader = gson.newJsonReader(charReader);//原來是使用value.charStream Object obj = adapter.read(jsonReader); handlerTokenTimeOut(obj); return obj; } catch (JsonSyntaxException e) {//當catch到這個錯誤說明gson解析錯誤,基本肯定是服務端responseData的問題,此時我們自己解析 InputStreamReader errorReader = new InputStreamReader(new ByteArrayInputStream(valueBytes), "UTF-8");//後面的charset根據服務端的編碼來定 errorJsonReader = gson.newJsonReader(errorReader); MResponse errorResponse = new MResponse(); errorResponse.responseData = null;//設為null errorJsonReader.beginObject(); while (errorJsonReader.hasNext()) { String nextName = errorJsonReader.nextName(); if ("responseCode".equals(nextName)) { errorResponse.responseCode = errorJsonReader.nextString(); } else { errorJsonReader.skipValue();//跳過所有其他的值 } } errorJsonReader.endObject(); handlerTokenTimeOut(errorResponse); return errorResponse; } finally { if (jsonReader != null) jsonReader.close(); if (errorJsonReader != null) errorJsonReader.close(); } }