天气项目·Bean

2016-07-26  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读