三天完成小应用 大开天气1——GSON的使用

本文介绍使用聚合数据API开发天气应用的过程,包括通过GSON解析JSON数据、创建对应的JavaBean类以及网络数据获取方法。

花了几天的时间做了这个天气应用 

通过聚合数据API来获取天气信息

那么第一步就是用获取网络数据然后通过GSON来解析JSON数据

按照聚合数据返回的json数据 如下

{
    "reason": "查询成功",
    "result": {
        "data": {
            "realtime": {
                "city_code": "101210701",
                "city_name": "温州",    /*城市*/
                "date": "2014-10-15",  /*日期*/
                "time": "09:00:00",    /*更新时间*/
                "week": 3,
                "moon": "九月廿二",
                "dataUptime": 1413337811,
                "weather": {    /*当前实况天气*/
                    "temperature": "19",    /*温度*/
                    "humidity": "54",    /*湿度*/
                    "info": "雾",
                    "img": "18" /*18是雾这种天气所对应的图片的ID,每种天气的图片需要您自己设计,或者请阅读
https://www.juhe.cn/docs/api/id/39/aid/117*/
                },
                "wind": {
                    "direct": "北风",
                    "power": "1级",
                    "offset": null,
                    "windspeed": null
                }
            },
            "life": {    /*生活指数*/
                "date": "2014-10-15",
                "info": {
                    "chuanyi": [    /*穿衣指数*/
                        "较舒适",
                        "建议着薄外套或牛仔衫裤等服装。年老体弱者宜着夹克衫、薄毛衣等。昼夜温差较大,注意适当增减衣服。"
                    ],
                    "ganmao": [    /*感冒指数*/
                        "较易发",
                        "昼夜温差较大,较易发生感冒,请适当增减衣服。体质较弱的朋友请注意防护。"
                    ],
                    "kongtiao": [  /*空调指数*/
                        "较少开启",
                        "您将感到很舒适,一般不需要开启空调。"
                    ],
                    "wuran": [    /*污染指数*/
                        "良",
                        "气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。"
                    ],
                    "xiche": [    /*洗车指数*/
                        "较适宜",
                        "较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"
                    ],
                    "yundong": [    /*运动指数*/
                        "较适宜",
                        "天气较好,但风力较大,推荐您进行室内运动,若在户外运动请注意防风。"
                    ],
                    "ziwaixian": [  /*紫外线*/
                        "中等",
                        "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"
                    ]
                }
            },
            "weather": [  /*未来几天天气预报*/
                {
                    "date": "2014-10-15",
                    "info": {
                        "day": [    /*白天天气*/
                            "0",    /*天气ID*/
                            "晴",    /*天气*/
                            "24",    /*高温*/
                            "东北风",    /*风向*/
                            "3-4 级"      /*风力*/
                        ],
                        "night": [    /*夜间天气*/
                            "0",
                            "晴",
                            "13",
                            "东北风",
                            "3-4 级"
                        ]
                    },
                    "week": "三",
                    "nongli": "九月廿二"
                },
                {
                    "date": "2014-10-16",
                    "info": {
                        "dawn": [
                            "0",
                            "晴",
                            "13",
                            "东北风",
                            "3-4 级"
                        ],
                        "day": [
                            "0",
                            "晴",
                            "25",
                            "东北风",
                            "3-4 级"
                        ],
                        "night": [
                            "1",
                            "多云",
                            "15",
                            "东北风",
                            "3-4 级"
                        ]
                    },
                    "week": "四",
                    "nongli": "九月廿三"
                },
                {
                    "date": "2014-10-17",
                    "info": {
                        "dawn": [
                            "1",
                            "多云",
                            "15",
                            "东北风",
                            "3-4 级"
                        ],
                        "day": [
                            "1",
                            "多云",
                            "26",
                            "东北风",
                            "3-4 级"
                        ],
                        "night": [
                            "1",
                            "多云",
                            "16",
                            "东北风",
                            "3-4 级"
                        ]
                    },
                    "week": "五",
                    "nongli": "九月廿四"
                },
                {
                    "date": "2014-10-18",
                    "info": {
                        "dawn": [
                            "1",
                            "多云",
                            "16",
                            "东北风",
                            "3-4 级"
                        ],
                        "day": [
                            "1",
                            "多云",
                            "26",
                            "东风",
                            "3-4 级"
                        ],
                        "night": [
                            "1",
                            "多云",
                            "18",
                            "东风",
                            "3-4 级"
                        ]
                    },
                    "week": "六",
                    "nongli": "九月廿五"
                },
                {
                    "date": "2014-10-19",
                    "info": {
                        "dawn": [
                            "1",
                            "多云",
                            "18",
                            "东风",
                            "3-4 级"
                        ],
                        "day": [
                            "1",
                            "多云",
                            "27",
                            "东风",
                            "3-4 级"
                        ],
                        "night": [
                            "1",
                            "多云",
                            "19",
                            "东南风",
                            "3-4 级"
                        ]
                    },
                    "week": "日",
                    "nongli": "九月廿六"
                },
                {
                    "date": "2014-10-20",
                    "info": {
                        "dawn": [
                            "1",
                            "多云",
                            "19",
                            "东南风",
                            "3-4 级"
                        ],
                        "day": [
                            "1",
                            "多云",
                            "27",
                            "东南风",
                            "3-4 级"
                        ],
                        "night": [
                            "2",
                            "阴",
                            "18",
                            "南风",
                            "3-4 级"
                        ]
                    },
                    "week": "一",
                    "nongli": "九月廿七"
                },
                {
                    "date": "2014-10-21",
                    "info": {
                        "dawn": [
                            "2",
                            "阴",
                            "18",
                            "南风",
                            "3-4 级"
                        ],
                        "day": [
                            "1",
                            "多云",
                            "26",
                            "东北风",
                            "3-4 级"
                        ],
                        "night": [
                            "2",
                            "阴",
                            "17",
                            "",
                            "微风"
                        ]
                    },
                    "week": "二",
                    "nongli": "九月廿八"
                }
            ],
            "pm25": {    /*PM2.5*/
                "key": "Wenzhou",
                "show_desc": 0,
                "pm25": {
                    "curPm": "97",
                    "pm25": "72",
                    "pm10": "97",
                    "level": 2,
                    "quality": "良",
                    "des": "可以接受的,除极少数对某种污染物特别敏感的人以外,对公众健康没有危害。"
                },
                "dateTime": "2014年10月15日09时",
                "cityName": "温州"
            },
            "date": null,
            "isForeign": 0
        }
    },
    "error_code": 0
}

在添加了GSON jar之后
我们需要按照json格式来创建对应的 java bean
如下

public class DataBean {
    public String reason;
    public Result result;
    public int error_code;
}

最外层就是这三个 对应各自的类型  这里注意返回的result 因为内部还有复杂的内容所以用一个类再包起来

我们看一下result对应的类

public class Result{
    public Data data;

}

然后看看data

public  class Data {
    public Realtime realtime;

    public Life life;

    public List<Weather> weather;

    public Pm25 pm25;

    public String date;
    public String isForeign;
}
下面就不依次列举了 
这里获取json数据后可以通过下面这个网站类将其格式化一下 看得舒服多了
http://www.kjson.com/jsoneditor/ json在线编辑工具

然后就是获取网络数据了

public void getDataBean() {

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                //77ea626ec1eb28e6a026f511f0830c4a
                URL url = new URL("http://op.juhe.cn/onebox/weather/query?cityname=" + checkName + "&key=" + appKey);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");//设置请求方法
                conn.setConnectTimeout(5000);//设置连接超时
                conn.setReadTimeout(5000);//设置响应超时,连接上了但是服务器迟迟不给响应
                conn.connect();//连接服务器
                int responseCode = conn.getResponseCode();//获取响应码
                if (responseCode == 200) {
                    InputStream inputStream = conn.getInputStream();
                    result = StreamUtils.readFormStream(inputStream);
                    Log.d("AAAAAAAAAAAAAAAAAAAAAAA", result);

                    mHandler.sendEmptyMessage(0);
                }
            } catch (MalformedURLException e) {
                //URL错误异常
                e.printStackTrace();
            } catch (IOException e) {
                //网络错误异常
                e.printStackTrace();
            }
        }
    }).start();

}
这里封装了一个工具类 之前有用到过 将输入流转化为String

public class StreamUtils {
    /*
    * 将输入流读取成String后返回*/
    public static String readFormStream(InputStream in) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int len = 0;
        byte[] buffer = new byte[1023];
        while ((len = in.read(buffer)) != -1) {
            out.write(buffer, 0, len);
        }
        String result = out.toString();
        in.close();
        out.close();
        return result;
    }
}
然后GSON只需要如下几行代码就可以将json数据装入设置好的javabean中如下
高亮就是最外层的类

Gson gson = new Gson();
java.lang.reflect.Type type = new TypeToken< DataBean>() {
}.getType();
dataBean = gson.fromJson(result, type);

OK GSON解析数据就到这里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值