對Gson不了解的同學可以先去了解下Gson的基本用法
需要解析的Json字元串如下: {"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江蘇省"}]},"result":"ok"}
先貼上解析json字元串的代碼:
public ResponseData<Province_net> providerNetProviceListData(String result) {
ResponseData<Province_net> responseData = new ResponseData<Province_net>();
ResponseEntity<Province_net> responseEntity = new ResponseEntity<Province_net>();
Gson gson = new Gson();
BaseNetData<BaseNetProvincesList<Province_net>> baseNetData = gson.fromJson(
result,
new TypeToken<BaseNetData<BaseNetProvincesList<Province_net>>>() {
}.getType());
String resultCode = baseNetData.getResult();
if (null != resultCode && !TextUtils.isEmpty(resultCode)) {
if (resultCode.equalsIgnoreCase("ok")) {
responseData.setStatusCode(ResponseData.STATUS_CODE_SUCCESS);
responseEntity.setSuccessList(baseNetData.getData().getData());
responseData.setResponseEntity(responseEntity);
}
// redscs
else if (resultCode.equals("NO_DATA")) {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("沒有資料");
responseData.setResponseEntity(responseEntity);
} else if (resultCode.equalsIgnoreCase("EXCEPTION")) {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("伺服器端異常");
responseData.setResponseEntity(responseEntity);
} else if (resultCode.equalsIgnoreCase(INVALID_TOKEN)) {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg(INVALID_TOKEN);
responseData.setResponseEntity(responseEntity);
} else {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("未知錯誤");
responseData.setResponseEntity(responseEntity);
}
} else {
responseData.setStatusCode(ResponseData.STATUS_CODE_FAILURE);
responseEntity.setFailureMsg("擷取資料異常");
responseData.setResponseEntity(responseEntity);
}
return responseData;
}
首先我們定義了一個資料bean用來裝載Gson解析出來的資料:
public class ResponseData<T> {
public static final int STATUS_CODE_SUCCESS = STATUS_CODE_BEGIN + 1;
public static final int STATUS_CODE_FAILURE = STATUS_CODE_BEGIN + 2;
private int statusCode;
private ResponseEntity<T> responseEntity;
public int getStatusCode() {
return statusCode;
}
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
public ResponseEntity<T> getResponseEntity() {
return responseEntity;
}
public void setResponseEntity(ResponseEntity<T> responseEntity) {
this.responseEntity = responseEntity;
}
}
此類将所有的傳回分成傳回碼statusCode和傳回的實體responseEntity兩個部分。
然後定義了一個針對上述基本bean的實體的bean,
public class ResponseEntity<T> {
private String failureMsg;
private T successEntity;
private int totalCount;
private List<T> successList;
public String getFailureMsg() {
return failureMsg;
}
public void setFailureMsg(String failureMsg) {
this.failureMsg = failureMsg;
}
public T getSuccessEntity() {
return successEntity;
}
public void setSuccessEntity(T successEntity) {
this.successEntity = successEntity;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public List<T> getSuccessList() {
return successList;
}
public void setSuccessList(List<T> successList) {
this.successList = successList;
}
}
這個bean中有四個屬性,分别為:當傳回的資料格式為json對象的時候的successEntity ,錯誤資訊failureMsg,傳回資料格式為jsonArray的successList 以及jsonArray的長度。
下面針對具體的傳回定義了一個基礎Bean:
public class BaseNetData<T> {
private String result;
private T data;
public String getResult() {
return result;
}
public T getData() {
return data;
}
public void setResult(String result) {
this.result = result;
}
public void setData(T data) {
this.data = data;
}
}
針對{"data":{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江蘇省"}]},"result":"ok"} 。 此類中的result屬性對應json字元串中的“result”, data對應着“data” 。(一定保證字段名字的一緻)。
然後對于{"data":[{"id":"310000","indexId":"01","provinceName":"上海"},{"id":"320000","indexId":"02","provinceName":"江蘇省"}]} ,使用如下:
public class BaseNetListData<T> {
private int total;
private List<T> data;
public int getTotal() {
return total;
}
public List<T> getData() {
return data;
}
public void setTotal(int total) {
this.total = total;
}
public void setData(List<T> data) {
this.data = data;
}
}
如果傳回不是jsonArray而是jsonObject,則
public class BaseNetEntityData<T> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
通過以上的封裝我們可以根據伺服器的傳回類型來調整自己的資料bean,進而實作代碼的複用。。。。。。