需求:
将这个通过API返回的json数据解析出来,存在相对应的数据类中。
将服务器请求,通过json edit解析器解析得到的json arraylist,转换成java类数据arraylist
方法:
1.定义基础json数据类和基本的json数据处理方法,其他的数据类都会继承这个类
public abstract class TMAbsJsonData {
public static JSONArray convertToJsonArray(List<? extends TMAbsJsonData> list) {
JSONArray array = new JSONArray();
for (TMAbsJsonData data : list) {
array.put(data.exportAsJsonObj());
}
return array;
}
protected JSONObject originJsonData;
public TMAbsJsonData() {}
public TMAbsJsonData(JSONObject data) {
originJsonData = data;
}
/** export this structure as {@link org.json.JSONObject} */
public JSONObject exportAsJsonObj() {
return originJsonData;
}
/** export this structure as {@link String} */
public final String exportAsJsonString() {
return exportAsJsonObj().toString();
}
}
- 专为每个api请求得到的json数据✉️响应的数据类,若是一条item包括了多个数据类,就可以通过在item对应的数据类中包含json数据类的arrayist或者array的成员变量的方式:
(1)提取json数据的基本类
public class TMLifeMasterBannerData extends TMAbsJsonData{
public String acm,scm;
public int itemType;
public String itemId,itemLink;
public String itemImage;
public String bannerType;
public static ArrayList<TMLifeMasterBannerData> toArrayList(JSONArray array) {
if (array != null && array.length() > 0) {
ArrayList<TMLifeMasterBannerData> list = new ArrayList<TMLifeMasterBannerData>();
for (int index = 0; index < array.length(); index++) {
list.add(new TMLifeMasterBannerData(array.optJSONObject(index)));
}
return list;
}
return null;
}
public static TMLifeMasterBannerData createWithJsonObj(JSONObject object) {
TMLifeMasterBannerData data = null;
if (object != null) {
data = new TMLifeMasterBannerData(object);
}
return data;
}
public static TMLifeMasterBannerData createFromJsonString(String json) {
TMLifeMasterBannerData bannerData = null;
if (!TextUtils.isEmpty(json)) {
try {
bannerData= new TMLifeMasterBannerData(new JSONObject(json));
} catch (JSONException e) {
e.printStackTrace();
}
}
return bannerData;
}
public boolean isValid() {
return !(TextUtils.isEmpty(itemLink) || TextUtils.isEmpty(itemImage));
}
public TMLifeMasterBannerData(JSONObject data) {
super(data);
if (data != null) {
itemType = TMLifeMasterListItemData.TYPE.BANNER;
if (data != null) {
itemId = data.optString("id");
itemImage = data.optString("content");
itemLink = data.optString("action");
bannerType = data.optString("type");
acm = data.optString("acm");
scm = data.optString("scm");
}
}
}
}
(2)对应每个显示的item的数据类,包含多个json基本类
public class TMLifeMasterBannerItemData extends TMLifeMasterListItemData {
public String bannerType;
**public ArrayList<TMLifeMasterBannerData> bannerDatas;**
public static TMLifeMasterBannerItemData createWithJsonObj(JSONObject object) {
TMLifeMasterBannerItemData data = null;
if (object != null) {
data = new TMLifeMasterBannerItemData(object);
}
return data;
}
public boolean isValid() {
return bannerDatas == null ? false : true;
}
public TMLifeMasterBannerItemData(JSONObject data) {
super(data);
itemType = TYPE.BANNER;
if (data!=null)
{
bannerDatas = TMLifeMasterBannerData.toArrayList(data.optJSONArray("data"));
bannerType=bannerDatas.get(0).bannerType;
}
}
}
- 通过这些定义的数据类,就可以实现json数据的提取和转换
public TMLifeMasterBannerItemData bannerItem;
bannerItem=TMLifeMasterBannerItemData.createWithJsonObj(data.optJSONObject("201508240"));
- 在发出api数据请求后,在请求成功的回调函数(如onsuccess())中,将response返回的数据转换成jsonObject,然后使用之前定义的数据类,提取出jsonObject的数据,形成了java数据类对象
JSONObject data = response.getDataJsonObject();
if (data != null) {
JSONObject resultValue = data.optJSONObject("resultValue");
}
TMLifeMasterListData listData = new TMLifeMasterListData(resultValue);
- 将数据类对象按一定的布局显示给用户