Gson使用簡記

在APP的開發過程中,必不可少的就是網絡請求,請求服務器,得到數據,解析數據並加載到控件上,實現了APP的動態數據顯示。
在解析數據的方法上也是多種多樣的,之前用的都是JsonObject、JsonArray直接解析出來,後來發現用Gson配合Android Studio的 GsonFormat可以更加快速地解析數據。

首先,導入Gson包,在Android Studio的gradle裏面添加:

dependencies {
    compile 'com.google.code.gson:gson:2.6.2'
}

服務器返回值如下:

{
    "status": true, 
    "info": "獲取成功", 
    "results": {
        "version": "1", 
        "title": "測試標題", 
        "url": "http://www.baidu.com"
    }}

然後,用GsonFormat生成Bean文件:

public class WelcomePic {


    /**
     * status : true
     * info : 獲取成功
     * results : {"version":"1","title":"測試標題","url":"http://www.baidu.com"}
     */

    private boolean status;
    private String info;
    /**
     * version : 1
     * title : 測試標題
     * url : http://www.baidu.com
     */

    private ResultsBean results;

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public ResultsBean getResults() {
        return results;
    }

    public void setResults(ResultsBean results) {
        this.results = results;
    }

    public static class ResultsBean {
        private int version;
        private String title;
        private String url;

        public int getVersion() {
            return version;
        }

        public void setVersion(int version) {
            this.version = version;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }
}

獲取網路數據用的是Volley:

 /**
     * 獲取歡迎界面的圖片
     */
    private void getWelcome() {

        StringRequest stringRequest = new StringRequest(Baseurl.Welcome, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Gson gson = new Gson();
                WelcomePic welcomePic = gson.fromJson(response,WelcomePic.class);
                WelcomePic.ResultsBean resultsBean = welcomePic.getResults();
                if (welcomePic.isStatus()){
                      ToastUtil.showToast(context,
resultsBean.getTitle()+resultsBean.getUrl()+resultsBean.getVersion());
                    } 
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        queue.add(stringRequest);
    }

如果返回的數據包含了列表,原理類似:

{
    "status": true, 
    "info": "獲取信息成功", 
    "results": [
        {
            "id": "199", 
            "title": "APP1.1版本更新", 
            "classid": "1", 
            "info": "APP1.1版本更新,請更新APP", 
            "time": "2016-01-18 15:26:54", 
            "see": "1", 
            "type": "系統"
        }, 
        {
            "id": "198", 
            "title": "歡迎使用APP, 
            "classid": "2", 
            "info": "歡迎使用APP,希望你喜歡", 
            "time": "2016-01-18 15:27:55", 
            "see": "1", 
            "type": "通知"
        }
    ]
}

GsonFormat生成的Bean與之前的有點區別,前面的ResultsBean,後面的是List<ResultsBean>

public class MessageBean {

    private boolean status;
    private String info;
    private List<ResultsBean> results;

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public List<ResultsBean> getResults() {
        return results;
    }

    public void setResults(List<ResultsBean> results) {
        this.results = results;
    }

    public static class ResultsBean {
        private String id;
        private String title;
        private String classid;
        private String info;
        private String time;
        private int see;
        private String type;
        private String url;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getClassid() {
            return classid;
        }

        public void setClassid(String classid) {
            this.classid = classid;
        }

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }

        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        public int getSee() {
            return see;
        }

        public void setSee(int see) {
            this.see = see;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }
}

處理返回的數據:

 private void GetInfolist() {

        String path = ""
        StringRequest string = new StringRequest(path, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Gson gson = new Gson();
                MessageBean messageBean = gson.fromJson(response, MessageBean.class);
                List<MessageBean.ResultsBean> resultsBeen = messageBean.getResults();
                if (messageBean.isStatus()) {
                    for (int i = 0; i < resultsBeen.size(); i++) {
                        if (resultsBeen.get(i).getSee() == 0) {
                            resultsBeen.get(i).setSee(R.mipmap.ico_message_issee);
                        } else {
                            resultsBeen.get(i).setSee(Color.parseColor("#080809"));
                        }
                        messageBean.setResults(resultsBeen);
                    }
                    list.add(messageBean);
                    mAdapter.notifyDataSetChanged();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        mqueue.add(string);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章