美文网首页
天气项目·Bean

天气项目·Bean

作者: _人间客 | 来源:发表于2016-07-26 20:00 被阅读12次

    一、FutureWeatherBean

    输出未来各天的天气情况吗,内含变量:temperture、 wind、 weather、week。

    (一)初始化(Ctrl+1)

    (二)get( )/set( )函数。(右键->source->Generate Getters and Setters)

    二、WeatherBean

    读取JSON数据。通过JSONObject来创建WeatherBean对象

    JSON数据格式:键值对

    相对应的,Bean里含有私有数据:cityName、cityId、week、dateY、weather、pm、pmLevel、wind、temperture、windLevel、ArrayListfutureWeatherList;

    private ArrayList<FutureWeatherBean> futureWeatherList;//一个Bean的动态数组

    (一)构造函数(Ctrl+1)

    初:构造函数中,从JSON数据读出相应的数据。在mainActivity中有JsonObject对象:weatherJsonObject,用for循环从对象中读取出数据(weatherJsonObject.getString),并放入String对象。最后将读取出来的数据放入一个Bean对象。

    此外,所有的try-catch中的异常都放大,如:IOException->Exception.

    futureWeatherList = new ArrayList<FutureWeatherBea>();//初始化数组

    try {    //会抛出异常,Ctrl+1,添加try-catch

    cityName =weatherJsonObject.getString("city");

    cityId = weatherJsonObject.getInt("cityid")...//通过JsonObject的key获取值,并赋给字符串

    for (int i = 1; i < 7; i++) {

    String futureWeather = weatherJsonObject.getString("weather"+ i);//json里的变量名是weather1

    String futureWeek = getFutureWeekStringBy(week, i)...//依次获取futureTemperture, futureWind

    FutureWeatherBean futureWeatherBean = new FutureWeatherBean(futureTemperture, futureWind, futureWeather, futureWeek);// 封装成一个FutureWeatherBean。注意有数组属性时一定要初始化数组才能使用

    futureWeatherList.add(futureWeatherBean);}//添加到List里

    } catch (Exception e) {

    e.printStackTrace();}}

    后:将部分程序进行封装,相应地改为:以String resultString作为返回值的构造方法。并新写private String dealWithResultString(String resultString) 方法。在try的开头添加:

    String resultJsonString = dealWithResultString(resultString);//新添方法

    JSONObject jsonObject = new JSONObject(resultJsonString);// 通过JSON字符串创建JSONObject的对象

    JSONObject weatherJsonObject = jsonObject.getJSONObject("weatherinfo");//取出JSON数据里的"weatherinfo"并赋给weatherJsonObject

    总而言之:构造方法是将JSON数据里有用的信息提取出来封装成一个FutureWeatherBean

    实现方法:将JSON数据里的"weatherinfo"并赋给weatherJsonObject,再将weatherJsonObject里的数据依次取出赋值给String字符串再将各字符串封装成一个FutureWeatherBean

    (二)get( )/set( )函数。(右键->source->Generate Getters and Setters)

    (三)private String dealWithResultString(String resultString)

    int startIndex = resultString.indexOf("(") + 1;// 找到左右括号在字符串中的位置。

    int endIndex = resultString.indexOf(")");

    return resultString.substring(startIndex, endIndex);// 根据左右括号的位置截取中间的JSON字符串。


    (四)private String getFutureWeekStringBy(String week2, int itemIndex)

    一个关于获取明天是"星期X"的小算法

    ArrayList <String> weekStringList = new ArrayList();//new 一个动态数组,用于存放“星期X”

    weekStringList.add("星期一")...//把“星期X”添加到StringList里

    int currentDayIndex = weekStringList.indexOf(week);//今天的下标:值为“星期一”,对应下标为:0。(JSON里有键值对:"week": "星期一")

    int futureDayIndex = currentDayIndex + itemIndex;//计算明天的下标

    if (futureDayIndex > 6)    futureDayIndex -= 7;// 一共七天,循环

    return weekStringList.get(futureDayIndex);//根据计算的下标返回String

    相关文章

      网友评论

          本文标题:天气项目·Bean

          本文链接:https://www.haomeiwen.com/subject/tzonjttx.html