zoukankan      html  css  js  c++  java
  • 学习网络请求返回json对应的model

    原来泛型可以这样用:

    网络返回基类,返回一个code,msg,body,其中body不确定,所以,我们把它写成泛型

    import org.json.JSONObject;
    
    /**
     * 网络请求的基类
     * Created by  on 16/7/14.
     */
    public class NetData<T> {
        public static final int STATUS_OK = 0;
        public int code = -1;
        public String msg;
        public T body;
    
        /**
         * code码是否正确
         * @return
         */
        public boolean isCodeOk(){
            return code == STATUS_OK;
        }
    
    
        public JSONObject getJSONBody(JSONObject data){
            if(data == null){
                return null;
            }
    
            return data.optJSONObject("body");
        }
    
        public JSONObject getJSONBody(String data){
            JSONObject jsonObj = convertStrToJSON(data);
            return getJSONBody(jsonObj);
        }
    
        public void parseHead(String json){
            JSONObject jsonObject = convertStrToJSON(json);
            if(jsonObject != null){
                parseHead(jsonObject);
            }
        }
    
        public void parseHead(JSONObject obj){
            try {
                if(obj == null){
                    return;
                }
                code = obj.optInt("code");
                msg = obj.optString("msg");
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public JSONObject convertStrToJSON(String json){
            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(json);
            }catch (Exception e){
                e.printStackTrace();
            }
    
            return jsonObject;
        }
    }

    具体类:

    public class PlugUpdateInfo {
        public boolean mNeedUpdate;
        public String mVersion;
        public String mDownloadUrl;
        public boolean mForcedUpdate;
    
        /**
         * 解析数据
         * @param jsonStr
         * @return true,解析成功;false解析失败
         */
        public boolean parse(String jsonStr){
            JSONObject json = convertStrToJSON(jsonStr);
            return parse(json);
        }
    
        public boolean parse(JSONObject json){
            if(json == null){
                return false;
            }
    
            boolean needReflesh = json.optBoolean(Constants.NEED_UPDATE);
            String serverVersion = json.optString(Constants.VERSION);
            String mDownLoadUrl = json.optString(Constants.DOWNLOAD_URL);
            int  mforceUpdate = json.optInt(Constants.FORCED_UPDATAE); //强制更新,0:否,1:是
    
            this.mNeedUpdate = needReflesh;
            this.mVersion = serverVersion;
            this.mDownloadUrl = mDownLoadUrl;
            this.mForcedUpdate = mforceUpdate == 1?true:false;
    
            return true;
        }
    
        public JSONObject convertStrToJSON(String json){
            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(json);
            }catch (JSONException e){
                e.printStackTrace();
            }
    
            return jsonObject;
        }
    }

    组合:

    NetData<PlugUpdateInfo> baseData = new NetData<PlugUpdateInfo>();
                    baseData.parseHead(result);
    
                    if(baseData.isCodeOk()){
                        JSONObject jsonBody = baseData.getJSONBody(result);
    
                        PlugUpdateInfo data = new PlugUpdateInfo();
                        boolean success = data.parse(jsonBody);
                        if(success){
                            if(listener != null){
                                listener.onRequestDataSuccess(data);
                            }
                        }else{
                            if(listener != null){
                                listener.onRequestDataFailed(-1, "");
                            }
                        }
                    }else{
                        if(listener != null){
                            listener.onRequestDataFailed(baseData.code, baseData.msg);
                        }
                    }
  • 相关阅读:
    天梯赛练习 L3-011 直捣黄龙 (30分) dijkstra + dfs
    PAT甲级练习 1087 All Roads Lead to Rome (30分) 字符串hash + dijkstra
    天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟
    天梯赛练习 L3-008 喊山 (30分) bfs搜索
    天梯赛练习 L3-007 天梯地图 (30分) Dijkstra
    1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs
    PAT天梯赛练习 L3-004 肿瘤诊断 (30分) 三维BFS
    课堂实验(计算1!+2!+...+100!)
    39页作业第7题
    39页作业(还款年限—月还款额表)
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/6647782.html
Copyright © 2011-2022 走看看