package com.letv.watchball.parser; import android.util.Log; import org.json.JSONException; import org.json.JSONObject; import com.letv.http.bean.LetvBaseBean; import com.letv.http.parse.LetvMainParser; /** * 移动端接口,解析器父类 { header:{status:"x"}, body:{...} } 针对返回模式这样的解析 * */ public abstract class LetvMobileParser<T extends LetvBaseBean> extends LetvMainParser<T, JSONObject> { /** * 接口信息节点 * */ protected final String HEADER = "header"; /** * 接口返回状态:1-正常,2-无数据,3-服务异常 * */ protected final String STATUS = "status"; /** * 接口时间轴 * */ protected final String MARKID = "markid"; /** * 接口返回数据节点 * */ protected final String BODY = "body"; public interface STATE { public int NORMAL = 1; public int NODATA = 2; public int EXCEPTION = 3; public int NOUPDATE = 4; } /** * 借口状态 * */ protected int status; /** * 接口时间轴 * */ private String markid; public LetvMobileParser() { super(); } public LetvMobileParser(int from) { super(from); } @Override protected final boolean canParse(String data) { try { Log.d("feedbackdata", data); JSONObject object = new JSONObject(data); if (!object.has(HEADER)) { return false; } JSONObject headJson = object.getJSONObject(HEADER); status = getInt(headJson, STATUS); if (status == STATE.NORMAL) { if (has(headJson, MARKID)) { markid = getString(headJson, MARKID); } return true; } if (status == STATE.NOUPDATE) { return true; } } catch (JSONException e) { e.printStackTrace(); } return false; } @Override protected JSONObject getData(String data) throws JSONException { JSONObject object = null; if (status == STATE.NORMAL) { object = new JSONObject(data); object = getJSONObject(object, BODY); } else if (status == STATE.NOUPDATE) { object = new JSONObject(getLocationData()); } return object; } /** * 加载本地数据,需要缓存数据的解析器需要实现 * */ protected String getLocationData() { return null; }; public String getMarkId() { return markid; } public boolean isNewData() { return status == STATE.NORMAL; } }