• android 解析数据之Gson2


    这篇文章主要的目的是补充上一篇文章的,这次解析的是更加复杂的数据

    QIYBean(这是根据Json代码使用GsonFormat自动生成的类)很尴尬由于数据复杂所以生成的代码有点长

    package com.chuanxidemo.shaoxin.mymusic;
    
    import java.util.List;
    
    /**
     * Created by shaoxin on 2017/3/1.
     */
    
    public class QIYBean {
    
        /**
         * status : 1
         * data : {"province":"江苏省","cross_list":[{"distance":"191.482","direction":"West","name":"联谊路--绿溪路","weight":"120","level":"45000, 45000","longitude":"121.0512567","crossid":"021H51F0090093015--021H51F009009851","width":"8, 8","latitude":"31.31579861"},{"distance":"233.802","direction":"NorthEast","name":"陆家浜南路--陆家浜北路","weight":"120","level":"45000, 45000","longitude":"121.0476761","crossid":"021H51F00900930--021H51F0090093005","width":"8, 8","latitude":"31.31397833"},{"distance":"233.802","direction":"NorthEast","name":"陆家浜南路--绿溪路","weight":"120","level":"45000, 45000","longitude":"121.0476761","crossid":"021H51F00900930--021H51F009009851","width":"8, 8","latitude":"31.31397833"}],"code":"1","tel":"0512","cityadcode":"320500","areacode":"0512","timestamp":"1488353103.29","sea_area":{"adcode":"","name":""},"pos":"在政协陆家镇工作委员会附近, 在绿溪路旁边, 靠近联谊路--绿溪路路口","road_list":[{"distance":"79","direction":"North","name":"绿溪路","level":"5","longitude":"121.05","width":"8","roadid":"021H51F009009851","latitude":"31.3149"},{"distance":"152","direction":"SouthEast","name":"教堂路","level":"5","longitude":"121.048","width":"4","roadid":"021H51F0090092871","latitude":"31.3163"},{"distance":"191","direction":"West","name":"联谊路","level":"5","longitude":"121.051","width":"8","roadid":"021H51F0090093015","latitude":"31.3158"}],"result":"true","message":"Successful.","desc":"江苏省,苏州市,昆山市","city":"苏州市","districtadcode":"320583","district":"昆山市","country":"中国","provinceadcode":"320000","version":"2.0-3.0.7059.1533","adcode":"320583","poi_list":[{"distance":"161","direction":"West","tel":"0512-57671209;0512-57879719","name":"昆山市陆家人民医院","weight":"0.0","typecode":"090100","longitude":"121.047556","address":"陆家镇镇北路21号","latitude":"31.315543","entrances":[{"latitude":"31.314870","longitude":"121.047054"}],"type":"医疗保健服务;综合医院;综合医院","poiid":"B020016BMR"},{"distance":"141","direction":"SouthWest","tel":"0512-57671003","name":"陆家镇人民政府","weight":"0.0","typecode":"130105","longitude":"121.048398","address":"菉溪路22号","latitude":"31.314555","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020007YBU"},{"distance":"141","direction":"SouthWest","tel":"","name":"陆家镇人民代表大会","weight":"0.0","typecode":"130105","longitude":"121.048398","address":"菉溪路22号","latitude":"31.314555","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020007YBT"},{"distance":"141","direction":"SouthWest","tel":"","name":"中共昆山市陆家镇委员会","weight":"0.0","typecode":"130105","longitude":"121.048398","address":"菉溪路22号","latitude":"31.314555","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020008HW1"},{"distance":"140","direction":"SouthWest","tel":"","name":"政协陆家镇工作委员会","weight":"0.0","typecode":"130105","longitude":"121.048395","address":"菉溪路22号","latitude":"31.314563","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020016BUS"}]}
         */
    
        private String status;
        private DataBean data;
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        public DataBean getData() {
            return data;
        }
    
        public void setData(DataBean data) {
            this.data = data;
        }
    
        public static class DataBean {
            /**
             * province : 江苏省
             * cross_list : [{"distance":"191.482","direction":"West","name":"联谊路--绿溪路","weight":"120","level":"45000, 45000","longitude":"121.0512567","crossid":"021H51F0090093015--021H51F009009851","width":"8, 8","latitude":"31.31579861"},{"distance":"233.802","direction":"NorthEast","name":"陆家浜南路--陆家浜北路","weight":"120","level":"45000, 45000","longitude":"121.0476761","crossid":"021H51F00900930--021H51F0090093005","width":"8, 8","latitude":"31.31397833"},{"distance":"233.802","direction":"NorthEast","name":"陆家浜南路--绿溪路","weight":"120","level":"45000, 45000","longitude":"121.0476761","crossid":"021H51F00900930--021H51F009009851","width":"8, 8","latitude":"31.31397833"}]
             * code : 1
             * tel : 0512
             * cityadcode : 320500
             * areacode : 0512
             * timestamp : 1488353103.29
             * sea_area : {"adcode":"","name":""}
             * pos : 在政协陆家镇工作委员会附近, 在绿溪路旁边, 靠近联谊路--绿溪路路口
             * road_list : [{"distance":"79","direction":"North","name":"绿溪路","level":"5","longitude":"121.05","width":"8","roadid":"021H51F009009851","latitude":"31.3149"},{"distance":"152","direction":"SouthEast","name":"教堂路","level":"5","longitude":"121.048","width":"4","roadid":"021H51F0090092871","latitude":"31.3163"},{"distance":"191","direction":"West","name":"联谊路","level":"5","longitude":"121.051","width":"8","roadid":"021H51F0090093015","latitude":"31.3158"}]
             * result : true
             * message : Successful.
             * desc : 江苏省,苏州市,昆山市
             * city : 苏州市
             * districtadcode : 320583
             * district : 昆山市
             * country : 中国
             * provinceadcode : 320000
             * version : 2.0-3.0.7059.1533
             * adcode : 320583
             * poi_list : [{"distance":"161","direction":"West","tel":"0512-57671209;0512-57879719","name":"昆山市陆家人民医院","weight":"0.0","typecode":"090100","longitude":"121.047556","address":"陆家镇镇北路21号","latitude":"31.315543","entrances":[{"latitude":"31.314870","longitude":"121.047054"}],"type":"医疗保健服务;综合医院;综合医院","poiid":"B020016BMR"},{"distance":"141","direction":"SouthWest","tel":"0512-57671003","name":"陆家镇人民政府","weight":"0.0","typecode":"130105","longitude":"121.048398","address":"菉溪路22号","latitude":"31.314555","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020007YBU"},{"distance":"141","direction":"SouthWest","tel":"","name":"陆家镇人民代表大会","weight":"0.0","typecode":"130105","longitude":"121.048398","address":"菉溪路22号","latitude":"31.314555","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020007YBT"},{"distance":"141","direction":"SouthWest","tel":"","name":"中共昆山市陆家镇委员会","weight":"0.0","typecode":"130105","longitude":"121.048398","address":"菉溪路22号","latitude":"31.314555","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020008HW1"},{"distance":"140","direction":"SouthWest","tel":"","name":"政协陆家镇工作委员会","weight":"0.0","typecode":"130105","longitude":"121.048395","address":"菉溪路22号","latitude":"31.314563","type":"政府机构及社会团体;政府机关;乡镇级政府及事业单位","poiid":"B020016BUS"}]
             */
    
            private String province;
            private String code;
            private String tel;
            private String cityadcode;
            private String areacode;
            private String timestamp;
            private SeaAreaBean sea_area;
            private String pos;
            private String result;
            private String message;
            private String desc;
            private String city;
            private String districtadcode;
            private String district;
            private String country;
            private String provinceadcode;
            private String version;
            private String adcode;
            private List<CrossListBean> cross_list;
            private List<RoadListBean> road_list;
            private List<PoiListBean> poi_list;
    
            public String getProvince() {
                return province;
            }
    
            public void setProvince(String province) {
                this.province = province;
            }
    
            public String getCode() {
                return code;
            }
    
            public void setCode(String code) {
                this.code = code;
            }
    
            public String getTel() {
                return tel;
            }
    
            public void setTel(String tel) {
                this.tel = tel;
            }
    
            public String getCityadcode() {
                return cityadcode;
            }
    
            public void setCityadcode(String cityadcode) {
                this.cityadcode = cityadcode;
            }
    
            public String getAreacode() {
                return areacode;
            }
    
            public void setAreacode(String areacode) {
                this.areacode = areacode;
            }
    
            public String getTimestamp() {
                return timestamp;
            }
    
            public void setTimestamp(String timestamp) {
                this.timestamp = timestamp;
            }
    
            public SeaAreaBean getSea_area() {
                return sea_area;
            }
    
            public void setSea_area(SeaAreaBean sea_area) {
                this.sea_area = sea_area;
            }
    
            public String getPos() {
                return pos;
            }
    
            public void setPos(String pos) {
                this.pos = pos;
            }
    
            public String getResult() {
                return result;
            }
    
            public void setResult(String result) {
                this.result = result;
            }
    
            public String getMessage() {
                return message;
            }
    
            public void setMessage(String message) {
                this.message = message;
            }
    
            public String getDesc() {
                return desc;
            }
    
            public void setDesc(String desc) {
                this.desc = desc;
            }
    
            public String getCity() {
                return city;
            }
    
            public void setCity(String city) {
                this.city = city;
            }
    
            public String getDistrictadcode() {
                return districtadcode;
            }
    
            public void setDistrictadcode(String districtadcode) {
                this.districtadcode = districtadcode;
            }
    
            public String getDistrict() {
                return district;
            }
    
            public void setDistrict(String district) {
                this.district = district;
            }
    
            public String getCountry() {
                return country;
            }
    
            public void setCountry(String country) {
                this.country = country;
            }
    
            public String getProvinceadcode() {
                return provinceadcode;
            }
    
            public void setProvinceadcode(String provinceadcode) {
                this.provinceadcode = provinceadcode;
            }
    
            public String getVersion() {
                return version;
            }
    
            public void setVersion(String version) {
                this.version = version;
            }
    
            public String getAdcode() {
                return adcode;
            }
    
            public void setAdcode(String adcode) {
                this.adcode = adcode;
            }
    
            public List<CrossListBean> getCross_list() {
                return cross_list;
            }
    
            public void setCross_list(List<CrossListBean> cross_list) {
                this.cross_list = cross_list;
            }
    
            public List<RoadListBean> getRoad_list() {
                return road_list;
            }
    
            public void setRoad_list(List<RoadListBean> road_list) {
                this.road_list = road_list;
            }
    
            public List<PoiListBean> getPoi_list() {
                return poi_list;
            }
    
            public void setPoi_list(List<PoiListBean> poi_list) {
                this.poi_list = poi_list;
            }
    
            public static class SeaAreaBean {
                /**
                 * adcode :
                 * name :
                 */
    
                private String adcode;
                private String name;
    
                public String getAdcode() {
                    return adcode;
                }
    
                public void setAdcode(String adcode) {
                    this.adcode = adcode;
                }
    
                public String getName() {
                    return name;
                }
    
                public void setName(String name) {
                    this.name = name;
                }
            }
    
            public static class CrossListBean {
                /**
                 * distance : 191.482
                 * direction : West
                 * name : 联谊路--绿溪路
                 * weight : 120
                 * level : 45000, 45000
                 * longitude : 121.0512567
                 * crossid : 021H51F0090093015--021H51F009009851
                 * width : 8, 8
                 * latitude : 31.31579861
                 */
    
                private String distance;
                private String direction;
                private String name;
                private String weight;
                private String level;
                private String longitude;
                private String crossid;
                private String width;
                private String latitude;
    
                public String getDistance() {
                    return distance;
                }
    
                public void setDistance(String distance) {
                    this.distance = distance;
                }
    
                public String getDirection() {
                    return direction;
                }
    
                public void setDirection(String direction) {
                    this.direction = direction;
                }
    
                public String getName() {
                    return name;
                }
    
                public void setName(String name) {
                    this.name = name;
                }
    
                public String getWeight() {
                    return weight;
                }
    
                public void setWeight(String weight) {
                    this.weight = weight;
                }
    
                public String getLevel() {
                    return level;
                }
    
                public void setLevel(String level) {
                    this.level = level;
                }
    
                public String getLongitude() {
                    return longitude;
                }
    
                public void setLongitude(String longitude) {
                    this.longitude = longitude;
                }
    
                public String getCrossid() {
                    return crossid;
                }
    
                public void setCrossid(String crossid) {
                    this.crossid = crossid;
                }
    
                public String getWidth() {
                    return width;
                }
    
                public void setWidth(String width) {
                    this.width = width;
                }
    
                public String getLatitude() {
                    return latitude;
                }
    
                public void setLatitude(String latitude) {
                    this.latitude = latitude;
                }
            }
    
            public static class RoadListBean {
                /**
                 * distance : 79
                 * direction : North
                 * name : 绿溪路
                 * level : 5
                 * longitude : 121.05
                 * width : 8
                 * roadid : 021H51F009009851
                 * latitude : 31.3149
                 */
    
                private String distance;
                private String direction;
                private String name;
                private String level;
                private String longitude;
                private String width;
                private String roadid;
                private String latitude;
    
                public String getDistance() {
                    return distance;
                }
    
                public void setDistance(String distance) {
                    this.distance = distance;
                }
    
                public String getDirection() {
                    return direction;
                }
    
                public void setDirection(String direction) {
                    this.direction = direction;
                }
    
                public String getName() {
                    return name;
                }
    
                public void setName(String name) {
                    this.name = name;
                }
    
                public String getLevel() {
                    return level;
                }
    
                public void setLevel(String level) {
                    this.level = level;
                }
    
                public String getLongitude() {
                    return longitude;
                }
    
                public void setLongitude(String longitude) {
                    this.longitude = longitude;
                }
    
                public String getWidth() {
                    return width;
                }
    
                public void setWidth(String width) {
                    this.width = width;
                }
    
                public String getRoadid() {
                    return roadid;
                }
    
                public void setRoadid(String roadid) {
                    this.roadid = roadid;
                }
    
                public String getLatitude() {
                    return latitude;
                }
    
                public void setLatitude(String latitude) {
                    this.latitude = latitude;
                }
            }
    
            public static class PoiListBean {
                /**
                 * distance : 161
                 * direction : West
                 * tel : 0512-57671209;0512-57879719
                 * name : 昆山市陆家人民医院
                 * weight : 0.0
                 * typecode : 090100
                 * longitude : 121.047556
                 * address : 陆家镇镇北路21号
                 * latitude : 31.315543
                 * entrances : [{"latitude":"31.314870","longitude":"121.047054"}]
                 * type : 医疗保健服务;综合医院;综合医院
                 * poiid : B020016BMR
                 */
    
                private String distance;
                private String direction;
                private String tel;
                private String name;
                private String weight;
                private String typecode;
                private String longitude;
                private String address;
                private String latitude;
                private String type;
                private String poiid;
                private List<EntrancesBean> entrances;
    
                public String getDistance() {
                    return distance;
                }
    
                public void setDistance(String distance) {
                    this.distance = distance;
                }
    
                public String getDirection() {
                    return direction;
                }
    
                public void setDirection(String direction) {
                    this.direction = direction;
                }
    
                public String getTel() {
                    return tel;
                }
    
                public void setTel(String tel) {
                    this.tel = tel;
                }
    
                public String getName() {
                    return name;
                }
    
                public void setName(String name) {
                    this.name = name;
                }
    
                public String getWeight() {
                    return weight;
                }
    
                public void setWeight(String weight) {
                    this.weight = weight;
                }
    
                public String getTypecode() {
                    return typecode;
                }
    
                public void setTypecode(String typecode) {
                    this.typecode = typecode;
                }
    
                public String getLongitude() {
                    return longitude;
                }
    
                public void setLongitude(String longitude) {
                    this.longitude = longitude;
                }
    
                public String getAddress() {
                    return address;
                }
    
                public void setAddress(String address) {
                    this.address = address;
                }
    
                public String getLatitude() {
                    return latitude;
                }
    
                public void setLatitude(String latitude) {
                    this.latitude = latitude;
                }
    
                public String getType() {
                    return type;
                }
    
                public void setType(String type) {
                    this.type = type;
                }
    
                public String getPoiid() {
                    return poiid;
                }
    
                public void setPoiid(String poiid) {
                    this.poiid = poiid;
                }
    
                public List<EntrancesBean> getEntrances() {
                    return entrances;
                }
    
                public void setEntrances(List<EntrancesBean> entrances) {
                    this.entrances = entrances;
                }
    
                public static class EntrancesBean {
                    /**
                     * latitude : 31.314870
                     * longitude : 121.047054
                     */
    
                    private String latitude;
                    private String longitude;
    
                    public String getLatitude() {
                        return latitude;
                    }
    
                    public void setLatitude(String latitude) {
                        this.latitude = latitude;
                    }
    
                    public String getLongitude() {
                        return longitude;
                    }
    
                    public void setLongitude(String longitude) {
                        this.longitude = longitude;
                    }
                }
            }
        }
    }

    GsonUtil(用来解析Json数据)

    package com.chuanxidemo.shaoxin.mymusic;
    
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by shaoxin on 2017/3/1.
     */
    
    public class GsonUtil {
        public static BufferedReader bufferedReader;
        public static StringBuffer stringBuffer;
    
        // 将Json数据解析成相应的映射对象
        public static <T> T parseJsonWithGson(String jsonData, Class<T> type) {
            Gson goson = new Gson();
            T result = goson.fromJson(jsonData, type);
            return result;
        }
    
        // 将Json数组解析成相应的映射对象列表
        public static <T> List<T> parseJsonArrayWithGson(String jsonData, Class<T> cls) {
            Gson gson = new Gson();
            List<T> result = new ArrayList<>();
            result = gson.fromJson(jsonData, new TypeToken<List<T>>() {
            }.getType());
            return result;
        }
    
    
        // 根据json数据地址获取数据
        public static String getData(String jsonURL) {
            try {
                stringBuffer = new StringBuffer();
                URL url = new URL(jsonURL);//json地址
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");//使用get方法接收
                InputStream inputStream = connection.getInputStream();//得到一个输入流
                bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTf-8"));
                String sread = null;
                while ((sread = bufferedReader.readLine()) != null) {
                    stringBuffer.append(sread);
                    stringBuffer.append("
    ");
                }
    //            Log.i("msg", "onClick: " + stringBuffer.toString());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return stringBuffer.toString();
        }
    
    
    }

    GetGsonData(获取其中的数据)

    package com.chuanxidemo.shaoxin.mymusic;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by shaoxin on 2017/3/1.
     */
    
    public class GetGsonData extends AppCompatActivity {
        GsonUtil gsonUtil;
        private TextView txt;
        private Button getData;
        QIYBean qiyBean;
        Handler handler;
        List<QIYBean.DataBean.CrossListBean> listBeen;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.showdata);
            txt = (TextView) findViewById(R.id.txt);
            getData = (Button) findViewById(R.id.get_data);
    
            gsonUtil = new GsonUtil();
            handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    txt.setText(qiyBean.getStatus());
                }
            };
            getData.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    new Thread() {
                        @Override
                        public void run() {
                            super.run();
                            String data = gsonUtil.getData("http://ditu.amap.com/service/regeo?longitude=121.04925573429551&latitude=31.315590522490712");//加载的Json数据网址
                            qiyBean = gsonUtil.parseJsonWithGson(data, QIYBean.class);//先获取类对象
                            handler.sendEmptyMessage(0x123);//线程中不能直接对UI进行设计所以用Handler解决
                            Log.i("msg", "run: " + qiyBean.getStatus());
                            listBeen = new ArrayList<QIYBean.DataBean.CrossListBean>();
                            listBeen = qiyBean.getData().getCross_list();//调用类中的方法获取新的对象集合
                            QIYBean.DataBean.CrossListBean crossListBean = listBeen.get(0);//获取集合里的第一个对象
                            Log.i("msg", "run: " + crossListBean.getDirection());//用对象掉方法
    
    
                        }
                    }.start();
    
                }
            });
    
    
        }
    }

    showdata.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/txt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <Button
            android:id="@+id/get_data"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="获取数据"/>
    </LinearLayout>

    以上是完整代码,记得添加Gson包和添加权限

  • 相关阅读:
    IBatis简介
    cntlm代理使用
    bash快捷键你知道几个?
    django的Form中添加属性
    EMACS 中文显示为方框
    git合并子树
    算法 排序 python 实现堆排序
    android org.eclipse.wst.sse.core 0.0.0' but it could not be found
    我的EMACS配置
    python 输入# 自动跳到行首
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/6486327.html
Copyright © 2020-2023  润新知