Android实践之简易天气(一)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Android实践之简易天气(一)

Android实践之简易天气(一)

学习了好久的安卓,作者:fnhfire_7030把各个组件基本都学完了,就想自己做个软件巩固一下学习的知识,顺便体验一下做项目的感觉,好了,废话不多说,下面开始进行软件的制作。

首先,要做天气软件,当然需要获取天气数据了,我用的是百度的API,这里顺便附上链接百度天气api,我下载的是SDK,这样就简化了许多。具体SDK的使用方法,下载的压缩包里面有,这里就不再赘述了,如果不会的话可以留言。

获取json数据

这里的获取的天气数据都是json形式,所以要进行json数据解析,你可以直接选择json解析,也可以使用gson和fastgson进行解析发,这里我使用的是直接json解析。

我们现在来看一下,从服务器返回的json数据。作者:fnhfire_7030

{“HeWeather data service 3.0”:[{“aqi”:{“city”:{“aqi”:”82”,”pm10”:”83”,”pm25”:”60”}},”basic”:{“city”:”安阳”,”cnty”:”中国”,”id”:”CN101180201”,”lat”:”36.093000”,”lon”:”114.341000”,”update”:{“loc”:”2016-05-14 20:51”,”utc”:”2016-05-14 12:51”}},”daily_forecast”:[{“astro”:{“sr”:”05:17”,”ss”:”19:20”},”cond”:{“code_d”:”306”,”code_n”:”305”,”txt_d”:”中雨”,”txt_n”:”小雨”},”date”:”2016-05-14”,”hum”:”88”,”pcpn”:”18.0”,”pop”:”98”,”pres”:”1018”,”tmp”:{“max”:”16”,”min”:”11”},”vis”:”7”,”wind”:{“deg”:”15”,”dir”:”西北风”,”sc”:”微风”,”spd”:”2”}},{“astro”:{“sr”:”05:16”,”ss”:”19:21”},”cond”:{“code_d”:”100”,”code_n”:”100”,”txt_d”:”晴”,”txt_n”:”晴”},”date”:”2016-05-15”,”hum”:”13”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1018”,”tmp”:{“max”:”24”,”min”:”11”},”vis”:”10”,”wind”:{“deg”:”15”,”dir”:”西南风”,”sc”:”微风”,”spd”:”0”}},{“astro”:{“sr”:”05:15”,”ss”:”19:22”},”cond”:{“code_d”:”100”,”code_n”:”100”,”txt_d”:”晴”,”txt_n”:”晴”},”date”:”2016-05-16”,”hum”:”13”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1013”,”tmp”:{“max”:”29”,”min”:”13”},”vis”:”10”,”wind”:{“deg”:”194”,”dir”:”南风”,”sc”:”微风”,”spd”:”7”}},{“astro”:{“sr”:”05:14”,”ss”:”19:23”},”cond”:{“code_d”:”100”,”code_n”:”101”,”txt_d”:”晴”,”txt_n”:”多云”},”date”:”2016-05-17”,”hum”:”19”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1009”,”tmp”:{“max”:”29”,”min”:”16”},”vis”:”10”,”wind”:{“deg”:”195”,”dir”:”南风”,”sc”:”微风”,”spd”:”4”}},{“astro”:{“sr”:”05:14”,”ss”:”19:24”},”cond”:{“code_d”:”101”,”code_n”:”101”,”txt_d”:”多云”,”txt_n”:”多云”},”date”:”2016-05-18”,”hum”:”24”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1012”,”tmp”:{“max”:”27”,”min”:”15”},”vis”:”10”,”wind”:{“deg”:”165”,”dir”:”东南风”,”sc”:”微风”,”spd”:”6”}},{“astro”:{“sr”:”05:13”,”ss”:”19:24”},”cond”:{“code_d”:”101”,”code_n”:”305”,”txt_d”:”多云”,”txt_n”:”小雨”},”date”:”2016-05-19”,”hum”:”19”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1015”,”tmp”:{“max”:”27”,”min”:”16”},”vis”:”10”,”wind”:{“deg”:”126”,”dir”:”无持续风向”,”sc”:”微风”,”spd”:”5”}},{“astro”:{“sr”:”05:12”,”ss”:”19:25”},”cond”:{“code_d”:”305”,”code_n”:”101”,”txt_d”:”小雨”,”txt_n”:”多云”},”date”:”2016-05-20”,”hum”:”15”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1019”,”tmp”:{“max”:”23”,”min”:”16”},”vis”:”10”,”wind”:{“deg”:”99”,”dir”:”无持续风向”,”sc”:”微风”,”spd”:”5”}}],”hourly_forecast”:[{“date”:”2016-05-14 22:00”,”hum”:”91”,”pop”:”93”,”pres”:”1018”,”tmp”:”14”,”wind”:{“deg”:”264”,”dir”:”西风”,”sc”:”微风”,”spd”:”5”}}],”now”:{“cond”:{“code”:”300”,”txt”:”阵雨”},”fl”:”15”,”hum”:”88”,”pcpn”:”.2”,”pres”:”1018”,”tmp”:”13”,”vis”:”7”,”wind”:{“deg”:”343”,”dir”:”西南风”,”sc”:”4-5”,”spd”:”19”}},”status”:”ok”,”suggestion”:{“comf”:{“brf”:”舒适”,”txt”:”白天不太热也不太冷,风力不大,相信您在这样的天气条件下,应会感到比较清爽和舒适。”},”cw”:{“brf”:”不宜”,”txt”:”不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。”},”drsg”:{“brf”:”舒适”,”txt”:”建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。”},”flu”:{“brf”:”较易发”,”txt”:”昼夜温差较大,较易发生感冒,请适当增减衣服。体质较弱的朋友请注意防护。”},”sport”:{“brf”:”较适宜”,”txt”:”天气较好,但风力较大,推荐您进行室内运动,若在户外运动请注意防风。”},”trav”:{“brf”:”适宜”,”txt”:”天气较好,风稍大,但温度适宜,是个好天气哦。适宜旅游,您可以尽情地享受大自然的无限风光。”},”uv”:{“brf”:”中等”,”txt”:”属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。”}}},{“basic”:{“city”:”Anyang”,”cnty”:”Korea”,”id”:”KR1846898”,”lat”:”37.392502”,”lon”:”126.926941”,”update”:{“loc”:”2016-05-14 21:00”,”utc”:”2016-05-14 12:00”}},”daily_forecast”:[{“astro”:{“sr”:”05:24”,”ss”:”19:34”},”cond”:{“code_d”:”100”,”code_n”:”103”,”txt_d”:”Sunny/Clear”,”txt_n”:”Partly Cloudy”},”date”:”2016-05-14”,”hum”:”54”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1025”,”tmp”:{“max”:”23”,”min”:”14”},”vis”:”10”,”wind”:{“deg”:”127”,”dir”:”SE”,”sc”:”1-2”,”spd”:”13”}},{“astro”:{“sr”:”05:24”,”ss”:”19:35”},”cond”:{“code_d”:”100”,”code_n”:”306”,”txt_d”:”Sunny/Clear”,”txt_n”:”Moderate Rain”},”date”:”2016-05-15”,”hum”:”68”,”pcpn”:”23.5”,”pop”:”88”,”pres”:”1016”,”tmp”:{“max”:”22”,”min”:”11”},”vis”:”10”,”wind”:{“deg”:”134”,”dir”:”SE”,”sc”:”1-2”,”spd”:”13”}},{“astro”:{“sr”:”05:23”,”ss”:”19:36”},”cond”:{“code_d”:”100”,”code_n”:”100”,”txt_d”:”Sunny/Clear”,”txt_n”:”Sunny/Clear”},”date”:”2016-05-16”,”hum”:”69”,”pcpn”:”8.9”,”pop”:”84”,”pres”:”1008”,”tmp”:{“max”:”20”,”min”:”16”},”vis”:”10”,”wind”:{“deg”:”325”,”dir”:”NW”,”sc”:”1-2”,”spd”:”13”}},{“astro”:{“sr”:”05:22”,”ss”:”19:36”},”cond”:{“code_d”:”100”,”code_n”:”100”,”txt_d”:”Sunny/Clear”,”txt_n”:”Sunny/Clear”},”date”:”2016-05-17”,”hum”:”57”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1016”,”tmp”:{“max”:”24”,”min”:”13”},”vis”:”10”,”wind”:{“deg”:”190”,”dir”:”S”,”sc”:”1-2”,”spd”:”13”}},{“astro”:{“sr”:”05:21”,”ss”:”19:37”},”cond”:{“code_d”:”100”,”code_n”:”103”,”txt_d”:”Sunny/Clear”,”txt_n”:”Partly Cloudy”},”date”:”2016-05-18”,”hum”:”50”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1019”,”tmp”:{“max”:”26”,”min”:”16”},”vis”:”10”,”wind”:{“deg”:”1”,”dir”:”N”,”sc”:”1-2”,”spd”:”13”}},{“astro”:{“sr”:”05:20”,”ss”:”19:38”},”cond”:{“code_d”:”103”,”code_n”:”100”,”txt_d”:”Partly Cloudy”,”txt_n”:”Sunny/Clear”},”date”:”2016-05-19”,”hum”:”57”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1021”,”tmp”:{“max”:”30”,”min”:”21”},”vis”:”10”,”wind”:{“deg”:”55”,”dir”:”NE”,”sc”:”1-2”,”spd”:”13”}},{“astro”:{“sr”:”05:20”,”ss”:”19:39”},”cond”:{“code_d”:”100”,”code_n”:”100”,”txt_d”:”Sunny/Clear”,”txt_n”:”Sunny/Clear”},”date”:”2016-05-20”,”hum”:”52”,”pcpn”:”0.0”,”pop”:”0”,”pres”:”1022”,”tmp”:{“max”:”31”,”min”:”21”},”vis”:”10”,”wind”:{“deg”:”34”,”dir”:”NE”,”sc”:”1-2”,”spd”:”13”}}],”hourly_forecast”:[{“date”:”2016-05-14 22:00”,”hum”:”76”,”pop”:”0”,”pres”:”1021”,”tmp”:”15”,”wind”:{“deg”:”264”,”dir”:”W”,”sc”:”1-2”,”spd”:”4”}}],”now”:{“cond”:{“code”:”103”,”txt”:”Partly Cloudy”},”fl”:”24”,”hum”:”46”,”pcpn”:”0.0”,”pres”:”1018”,”tmp”:”22”,”vis”:”10”,”wind”:{“deg”:”300”,”dir”:”WNW”,”sc”:”1-2”,”spd”:”13”}},”status”:”ok”}]}

是不是感觉特别复杂,所以呢你要是进行全部解析,还是推荐你用gson或fastgson的方式进行解析。Android studio里面有gson插件,使用起来也比较方便,不过要注意像这种“HeWeather data service 3.0” 一定要没有空格才能利用Android studio中的gson插件生成实体类,不然就会提示解析错误。

定义实体类

这里我只解析我要用到的数据,既然要解析,肯定需要一个实体类了,我定义的实体类内容如下:作者:fnhfire_7030

package com.baidu.apistore.sdk.bena;
import java.util.List;
/**
 * Created by xiaohui on 2016/5/15.
 */
public class WeatherBean {
    private List<OneDayWeatherInfs> mOneDayWeatherInfs;
    private int now;
    private int aqi;
    private int pm10;
    private int pm25;
    private String city;
    private String cond_txt;
    private String cnty;
    private String comfBrf;
    private String comfTxt;
    private String cwBrf;
    private String cwTxt;
    private String drsgBrf;
    private String drsgTxt;
    private String fluBrf;
    private String fluTxt;
    private String sportBrf;
    private String sportTxt;
    private String travBrf;
    private String travTxt;
    private String uvBrf;
    private String uvTxt;
    public WeatherBean() {
    }
    public WeatherBean(int aqi, String city, String cnty, String comfBrf, String comfTxt, String cond_txt, String cwBrf, String cwTxt, String drsgBrf, String drsgTxt, String fluBrf, String fluTxt, List<OneDayWeatherInfs> oneDayWeatherInfs, int now, int pm10, int pm25, String sportBrf, String sportTxt, String travBrf, String travTxt, String uvBrf, String uvTxt) {
        this.aqi = aqi;
        this.city = city;
        this.cnty = cnty;
        this.comfBrf = comfBrf;
        this.comfTxt = comfTxt;
        this.cond_txt = cond_txt;
        this.cwBrf = cwBrf;
        this.cwTxt = cwTxt;
        this.drsgBrf = drsgBrf;
        this.drsgTxt = drsgTxt;
        this.fluBrf = fluBrf;
        this.fluTxt = fluTxt;
        mOneDayWeatherInfs = oneDayWeatherInfs;
        this.now = now;
        this.pm10 = pm10;
        this.pm25 = pm25;
        this.sportBrf = sportBrf;
        this.sportTxt = sportTxt;
        this.travBrf = travBrf;
        this.travTxt = travTxt;
        this.uvBrf = uvBrf;
        this.uvTxt = uvTxt;
    }
    public int getAqi() {
        return aqi;
    }
    public void setAqi(int aqi) {
        this.aqi = aqi;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCnty() {
        return cnty;
    }
    public void setCnty(String cnty) {
        this.cnty = cnty;
    }
    public String getComfBrf() {
        return comfBrf;
    }
    public void setComfBrf(String comfBrf) {
        this.comfBrf = comfBrf;
    }
    public String getComfTxt() {
        return comfTxt;
    }
    public void setComfTxt(String comfTxt) {
        this.comfTxt = comfTxt;
    }
    public String getCond_txt() {
        return cond_txt;
    }
    public void setCond_txt(String cond_txt) {
        this.cond_txt = cond_txt;
    }
    public String getCwBrf() {
        return cwBrf;
    }
    public void setCwBrf(String cwBrf) {
        this.cwBrf = cwBrf;
    }
    public String getCwTxt() {
        return cwTxt;
    }
    public void setCwTxt(String cwTxt) {
        this.cwTxt = cwTxt;
    }
    public String getDrsgBrf() {
        return drsgBrf;
    }
    public void setDrsgBrf(String drsgBrf) {
        this.drsgBrf = drsgBrf;
    }
    public String getDrsgTxt() {
        return drsgTxt;
    }
    public void setDrsgTxt(String drsgTxt) {
        this.drsgTxt = drsgTxt;
    }
    public String getFluBrf() {
        return fluBrf;
    }
    public void setFluBrf(String fluBrf) {
        this.fluBrf = fluBrf;
    }
    public String getFluTxt() {
        return fluTxt;
    }
    public void setFluTxt(String fluTxt) {
        this.fluTxt = fluTxt;
    }
    public List<OneDayWeatherInfs> getOneDayWeatherInfs() {
        return mOneDayWeatherInfs;
    }
    public void setOneDayWeatherInfs(List<OneDayWeatherInfs> oneDayWeatherInfs) {
        mOneDayWeatherInfs = oneDayWeatherInfs;
    }
    public int getNow() {
        return now;
    }
    public void setNow(int now) {
        this.now = now;
    }
    public int getPm10() {
        return pm10;
    }
    public void setPm10(int pm10) {
        this.pm10 = pm10;
    }
    public int getPm25() {
        return pm25;
    }
    public void setPm25(int pm25) {
        this.pm25 = pm25;
    }
    public String getSportBrf() {
        return sportBrf;
    }
    public void setSportBrf(String sportBrf) {
        this.sportBrf = sportBrf;
    }
    public String getSportTxt() {
        return sportTxt;
    }
    public void setSportTxt(String sportTxt) {
        this.sportTxt = sportTxt;
    }
    public String getTravBrf() {
        return travBrf;
    }
    public void setTravBrf(String travBrf) {
        this.travBrf = travBrf;
    }
    public String getTravTxt() {
        return travTxt;
    }
    public void setTravTxt(String travTxt) {
        this.travTxt = travTxt;
    }
    public String getUvBrf() {
        return uvBrf;
    }
    public void setUvBrf(String uvBrf) {
        this.uvBrf = uvBrf;
    }
    public String getUvTxt() {
        return uvTxt;
    }
    public void setUvTxt(String uvTxt) {
        this.uvTxt = uvTxt;
    }
    @Override
    public String toString() {
        return "WeatherBean{" +
                "aqi=" + aqi +
                ", mOneDayWeatherInfs=" + mOneDayWeatherInfs +
                ", now=" + now +
                ", pm10=" + pm10 +
                ", pm25=" + pm25 +
                ", city='" + city + '\'' +
                ", cond_txt='" + cond_txt + '\'' +
                ", cnty='" + cnty + '\'' +
                ", comfBrf='" + comfBrf + '\'' +
                ", comfTxt='" + comfTxt + '\'' +
                ", cwBrf='" + cwBrf + '\'' +
                ", cwTxt='" + cwTxt + '\'' +
                ", drsgBrf='" + drsgBrf + '\'' +
                ", drsgTxt='" + drsgTxt + '\'' +
                ", fluBrf='" + fluBrf + '\'' +
                ", fluTxt='" + fluTxt + '\'' +
                ", sportBrf='" + sportBrf + '\'' +
                ", sportTxt='" + sportTxt + '\'' +
                ", travBrf='" + travBrf + '\'' +
                ", travTxt='" + travTxt + '\'' +
                ", uvBrf='" + uvBrf + '\'' +
                ", uvTxt='" + uvTxt + '\'' +
                '}';
    }
}

我们会发现里面List 的泛型是OneDayWeatherInfs,所以还需要一个OneDayWeatherInfs 类,其内容如下:

package com.baidu.apistore.sdk.bena;
/**
 * Created by xiaohui on 2016/5/15.
 */
public class OneDayWeatherInfs {
    private String condD;
    private String condN;
    private String date;
    private String windDir;
    private String windSc;
    private String windSpd;
    private int tmpMax;
    private int tmpMin;
    public OneDayWeatherInfs() {
    }
    public OneDayWeatherInfs(String condD, String condN, String date, int tmpMax, int tmpMin, String windDir, String windSc, String windSpd) {
        this.condD = condD;
        this.condN = condN;
        this.date = date;
        this.tmpMax = tmpMax;
        this.tmpMin = tmpMin;
        this.windDir = windDir;
        this.windSc = windSc;
        this.windSpd = windSpd;
    }
    public String getCondD() {
        return condD;
    }
    public void setCondD(String condD) {
        this.condD = condD;
    }
    public String getCondN() {
        return condN;
    }
    public void setCondN(String condN) {
        this.condN = condN;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public int getTmpMax() {
        return tmpMax;
    }
    public void setTmpMax(int tmpMax) {
        this.tmpMax = tmpMax;
    }
    public int getTmpMin() {
        return tmpMin;
    }
    public void setTmpMin(int tmpMin) {
        this.tmpMin = tmpMin;
    }
    public String getWindDir() {
        return windDir;
    }
    public void setWindDir(String windDir) {
        this.windDir = windDir;
    }
    public String getWindSc() {
        return windSc;
    }
    public void setWindSc(String windSc) {
        this.windSc = windSc;
    }
    public String getWindSpd() {
        return windSpd;
    }
    public void setWindSpd(String windSpd) {
        this.windSpd = windSpd;
    }
    @Override
    public String toString() {
        return "OneDayWeatherInfs{" +
                "condD='" + condD + '\'' +
                ", condN='" + condN + '\'' +
                ", date='" + date + '\'' +
                ", windDir='" + windDir + '\'' +
                ", windSc='" + windSc + '\'' +
                ", windSpd='" + windSpd + '\'' +
                ", tmpMax=" + tmpMax +
                ", tmpMin=" + tmpMin +
                '}';
    }
}

解析json数据

好了实体类已经写好,下面就要进行json解析了,解析json的类如下:

package com.baidu.apistore.sdk.prase;
import com.baidu.apistore.sdk.bena.OneDayWeatherInfs;
import com.baidu.apistore.sdk.bena.WeatherBean;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by xiaohui on 2016/5/15.
 */
public class Parse {
    public Parse() {
    }
    public static WeatherBean resolveWeatherInf(String strPar) {
        WeatherBean weatherBean = new WeatherBean();
        try {
            JSONObject dataOfJson = new JSONObject(strPar);
            JSONArray jsonArray = dataOfJson.getJSONArray("HeWeather data service 3.0");
            //空气质量解析
            JSONObject jsonArray0 = jsonArray.getJSONObject(0);
            JSONObject aqi = jsonArray0.getJSONObject("aqi");
            JSONObject city = aqi.getJSONObject("city");
            weatherBean.setAqi(city.getInt("aqi"));
            weatherBean.setPm10(city.getInt("pm10"));
            weatherBean.setPm25(city.getInt("pm25"));
            JSONObject basic = jsonArray0.getJSONObject("basic");
            weatherBean.setCity(basic.getString("city"));
            weatherBean.setCnty(basic.getString("cnty"));
            //当前温度
            JSONObject now = jsonArray0.getJSONObject("now");
            JSONObject nowCond = now.getJSONObject("cond");
            weatherBean.setNow(now.getInt("tmp"));
            weatherBean.setCond_txt(nowCond.getString("txt"));
            //连续七天的天气数据解析
            List<OneDayWeatherInfs> list = new ArrayList<>();
            JSONArray daily_forecast = jsonArray0.getJSONArray("daily_forecast");
            for (int i = 0; i < 7; i++) {
                OneDayWeatherInfs oneDayWeatherInfs = new OneDayWeatherInfs();
                JSONObject oneDayWeather = daily_forecast.getJSONObject(i);
                JSONObject cond = oneDayWeather.getJSONObject("cond");
                JSONObject temp = oneDayWeather.getJSONObject("tmp");
                JSONObject wind = oneDayWeather.getJSONObject("wind");
                oneDayWeatherInfs.setWindDir(wind.getString("dir"));
                oneDayWeatherInfs.setWindSc(wind.getString("sc"));
                oneDayWeatherInfs.setWindSpd(wind.getString("spd"));
                oneDayWeatherInfs.setTmpMax(temp.getInt("max"));
                oneDayWeatherInfs.setTmpMin(temp.getInt("min"));
                oneDayWeatherInfs.setCondD(cond.getString("txt_d"));
                oneDayWeatherInfs.setCondN(cond.getString("txt_n"));
                oneDayWeatherInfs.setDate(oneDayWeather.getString("date"));
                list.add(oneDayWeatherInfs);
            }
            weatherBean.setOneDayWeatherInfs(list);
            //舒适度指数解析
            JSONObject suggesttion = jsonArray0.getJSONObject("suggestion");
            JSONObject comf = suggesttion.getJSONObject("comf");
            weatherBean.setComfBrf(comf.getString("brf"));
            weatherBean.setComfTxt(comf.getString("txt"));
            JSONObject cw = suggesttion.getJSONObject("cw");
            weatherBean.setCwBrf(cw.getString("brf"));
            weatherBean.setCwTxt(cw.getString("txt"));
            JSONObject drsg = suggesttion.getJSONObject("drsg");
            weatherBean.setDrsgBrf(drsg.getString("brf"));
            weatherBean.setDrsgTxt(drsg.getString("txt"));
            JSONObject flu = suggesttion.getJSONObject("flu");
            weatherBean.setFluBrf(flu.getString("brf"));
            weatherBean.setFluTxt(flu.getString("txt"));
            JSONObject sport = suggesttion.getJSONObject("sport");
            weatherBean.setSportBrf(sport.getString("brf"));
            weatherBean.setSportTxt(sport.getString("txt"));
            JSONObject trav = suggesttion.getJSONObject("trav");
            weatherBean.setTravBrf(trav.getString("brf"));
            weatherBean.setTravTxt(trav.getString("txt"));
            JSONObject uv = suggesttion.getJSONObject("uv");
            weatherBean.setUvBrf(uv.getString("brf"));
            weatherBean.setUvTxt(uv.getString("txt"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return weatherBean;
    }
}

上面就是进行json数据解析的类,然后就是解析服务器返回来的数据了,具体内容如下:

/**
     * 这里的apiTest()方法是百度SDK自带的,返回的是json数据,
     * 我们只要在onSuccess方法里面添加解析json数据的方法就好了。
     */
    private void apiTest() {
        final Parameters para = new Parameters();
        para.put("city", "安阳");
        ApiStoreSDK.execute("http://apis.baidu.com/heweather/weather/free",
                ApiStoreSDK.GET,
                para,
                new ApiCallBack() {
                    @Override
                    public void onSuccess(int status, String responseString) {
                        Log.i("sdkdemo", "onSuccess");
                        Log.i("sdkdemo", "responseString" + responseString);
                        WeatherBean weatherBean = null;
                        Parse parse = new Parse();
                        weatherBean = parse.resolveWeatherInf(responseString);
                    }
                    @Override
                    public void onComplete() {
                        Log.i("sdkdemo", "onComplete");
                    }
                    @Override
                    public void onError(int status, String responseString, Exception e) {
                        Log.i("sdkdemo", "onError, status: " + status);
                        Log.i("sdkdemo", "errMsg: " + (e == null ? "" : e.getMessage()));
                        Toast.makeText(MainActivity.this, "" + getStackTrace(e), Toast.LENGTH_SHORT).show();
                    }
                });
    }

解析出来的数据如下

05-25 20:10:02.121 5162-5162/com.baidu.apistore.sdk I/fnhFire: weatherBean—>WeatherBean{aqi=51, mOneDayWeatherInfs=[OneDayWeatherInfs{condD=’晴’, condN=’阴’, date=’2016-05-25’, windDir=’西北风’, windSc=’3-4’, windSpd=’16’, tmpMax=33, tmpMin=18}, OneDayWeatherInfs{condD=’多云’, condN=’多云’, date=’2016-05-26’, windDir=’南风’, windSc=’微风’, windSpd=’2’, tmpMax=29, tmpMin=18}, OneDayWeatherInfs{condD=’小雨’, condN=’小雨’, date=’2016-05-27’, windDir=’南风’, windSc=’微风’, windSpd=’10’, tmpMax=23, tmpMin=15}, OneDayWeatherInfs{condD=’多云’, condN=’多云’, date=’2016-05-28’, windDir=’南风’, windSc=’微风’, windSpd=’8’, tmpMax=29, tmpMin=17}, OneDayWeatherInfs{condD=’多云’, condN=’多云’, date=’2016-05-29’, windDir=’东北风’, windSc=’微风’, windSpd=’7’, tmpMax=32, tmpMin=19}, OneDayWeatherInfs{condD=’多云’, condN=’阴’, date=’2016-05-30’, windDir=’无持续风向’, windSc=’微风’, windSpd=’7’, tmpMax=33, tmpMin=20}, OneDayWeatherInfs{condD=’小雨’, condN=’小雨’, date=’2016-05-31’, windDir=’无持续风向’, windSc=’微风’, windSpd=’5’, tmpMax=29, tmpMin=20}], now=23, pm10=50, pm25=11, city=’安阳’, cond_txt=’多云’, cnty=’中国’, comfBrf=’暂缺’, comfTxt=’暂缺’, cwBrf=’较适宜’, cwTxt=’较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。’, drsgBrf=’暂缺’, drsgTxt=’暂缺’, fluBrf=’暂缺’, fluTxt=’暂缺’, sportBrf=’暂缺’, sportTxt=’暂缺’, travBrf=’暂缺’, travTxt=’暂缺’, uvBrf=’暂缺’, uvTxt=’暂缺’}

额(⊙o⊙)…,也不知道怎么回事,在写这篇博客的时候,上面的好多数据都出现了暂缺,我能保证在这以前肯定是可以的。就先这样吧,应该是百度API发神经了,好了,到这里我们的json数据解析方面已经搞定了,下篇就是界面设计和将解析的数据放在界面上了


相关文章
|
2月前
|
移动开发 安全 Android开发
构建高效Android应用:Kotlin协程的实践与优化策略
【5月更文挑战第30天】 在移动开发领域,性能优化始终是关键议题之一。特别是对于Android开发者来说,如何在保证应用流畅性的同时,提升代码的执行效率,已成为不断探索的主题。近年来,Kotlin语言凭借其简洁、安全和实用的特性,在Android开发中得到了广泛的应用。其中,Kotlin协程作为一种新的并发处理机制,为编写异步、非阻塞性的代码提供了强大工具。本文将深入探讨Kotlin协程在Android开发中的应用实践,以及如何通过协程优化应用性能,帮助开发者构建更高效的Android应用。
|
19天前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
8天前
|
安全 Java 数据处理
Android多线程编程实践与优化技巧
Android多线程编程实践与优化技巧
|
2月前
|
物联网 区块链 Android开发
构建高效Android应用:Kotlin与Jetpack的实践之路未来技术的融合潮流:区块链、物联网与虚拟现实的交汇点
【5月更文挑战第30天】 在移动开发领域,效率和性能始终是开发者追求的核心。随着技术的不断进步,Kotlin语言以其简洁性和现代化特性成为Android开发的新宠。与此同时,Jetpack组件为应用开发提供了一套经过实践检验的库、工具和指南,旨在简化复杂任务并帮助提高应用质量。本文将深入探索如何通过Kotlin结合Jetpack组件来构建一个既高效又稳定的Android应用,并分享在此过程中的最佳实践和常见陷阱。
|
2月前
|
运维 监控 Android开发
构建高效自动化运维系统的策略与实践构建高效Android应用:Kotlin协程的实践指南
【5月更文挑战第29天】随着信息技术的迅猛发展,企业IT基础设施变得日益复杂,传统的手动运维模式已难以满足高效率、高稳定性的要求。本文将深入探讨如何通过自动化工具和策略来构建一个高效的自动化运维系统。文中不仅分析了自动化运维的必要性,还详细介绍了实现过程中的关键步骤,包括监控、配置管理、故障响应等,并结合实际案例分析其效果,以期为读者提供一套行之有效的自动化运维解决方案。
|
2月前
|
移动开发 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第29天】 随着移动开发技术的不断进步,开发者寻求更高效、更简洁的方式来编写代码。在Android平台上,Kotlin语言凭借其现代化的特性和对协程的原生支持,成为提高开发效率的关键。本文将深入分析Kotlin协程的核心优势,并通过实例展示如何在Android应用开发中有效地利用协程来处理异步任务,优化性能,以及提升用户体验。通过对比传统线程和回调机制,我们将揭示协程如何简化异步编程模型,并减少内存消耗,使应用更加健壮和可维护。
|
2月前
|
移动开发 安全 编译器
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在移动开发领域,性能优化和流畅的用户体验始终是开发者追求的目标。随着Android对Kotlin的支持日益增强,Kotlin协程作为一种新的并发处理方式,为Android应用的性能提升提供了新的可能性。本文将深入探讨Kotlin协程的核心优势,并通过具体实例展示如何在Android应用中有效利用协程来提升响应速度、减少内存消耗,并简化异步代码。
|
2月前
|
存储 缓存 算法
深入理解操作系统内存管理:分页系统的优势与挑战构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在现代计算机系统中,内存管理是操作系统的核心功能之一。分页系统作为一种内存管理技术,通过将物理内存划分为固定大小的单元——页面,为每个运行的程序提供独立的虚拟地址空间。这种机制不仅提高了内存的使用效率,还为多任务环境提供了必要的隔离性。然而,分页系统的实现也带来了一系列的挑战,包括页面置换算法的选择、内存抖动问题以及TLB(Translation Lookaside Buffer)的管理等。本文旨在探讨分页系统的原理、优势及其面临的挑战,并通过分析现有解决方案,提出可能的改进措施。
|
2月前
|
缓存 移动开发 Android开发
安卓应用性能优化实践
【5月更文挑战第27天】在移动开发领域,应用的性能直接影响用户体验。特别是对于安卓平台,由于设备多样性和应用生态环境的复杂性,性能优化成为了开发者的一项重要任务。本文将探讨针对安卓平台进行应用性能优化的策略与实践,包括内存管理、电池效率以及响应速度提升等方面,旨在为开发人员提供一套实用的性能调优工具和思路。
|
2月前
|
数据库 Android开发 UED
构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在面对移动应用开发时,性能优化和异步处理是提升用户体验的关键。Android平台上,Kotlin语言凭借其简洁性和功能性成为开发的首选之一。特别是Kotlin协程的引入,为开发者提供了一种更加简洁、高效的方式来处理并发和后台任务。本文将深入探讨Kotlin协程的核心原理,展示其在Android开发中的应用优势,并通过实例代码演示如何在实际项目中有效利用协程来改善应用性能和响应速度。