肥鱼的Android小王国

学到老才能活到老

一个项目搞定Android开发, Google天气预报开发之API的分析

顾名思义,我们是要利用Google的天气预报的API来开发一个天气预报程序.

Google天气的API为:http://www.google.com/ig/api?hl=zh-cn&weather=Beijing

我们来分析下这个API的相关参数:http表示的是使用Http请求获取数据.www.google.com/ig/api是GoogleAPI的接口.

?后面传递了两个参数,hl=zh-cn,这个参数表示的是国家代码. weather=Beijing,表示的是获取北京的天气信息.

那么,这一整个Url的意识就是,获取到中国北京的天气信息.

我们将这个Url放到浏览器的地址栏里,OK,浏览器收到了一份XML格式的文档.我们来看一下这个文档的格式.


<xml_api_reply version="1">

	<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1"
		row="0" section="0">

		<forecast_information>
			<city data="Beijing, Beijing" />
			<postal_code data="Beijing" />
			<latitude_e6 data="" />
			<longitude_e6 data="" />
			<forecast_date data="2012-03-21" />
			<current_date_time data="2012-03-21 16:00:00 +0000" />
			<unit_system data="SI" />
		</forecast_information>

		<current_conditions>
			<condition data="雨" />
			<temp_f data="41" />
			<temp_c data="5" />
			<humidity data="湿度: 76%" />
			<icon data="/ig/images/weather/cn_heavyrain.gif" />
			<wind_condition data="风向: 东南、风速:2 米/秒" />
		</current_conditions>

		<forecast_conditions>
			<day_of_week data="周三" />
			<low data="3" />
			<high data="13" />
			<icon data="/ig/images/weather/mostly_sunny.gif" />
			<condition data="晴间多云" />
		</forecast_conditions>

		<forecast_conditions>
			<day_of_week data="周四" />
			<low data="1" />
			<high data="11" />
			<icon data="/ig/images/weather/mostly_sunny.gif" />
			<condition data="晴间多云" />
		</forecast_conditions>

		<forecast_conditions>
			<day_of_week data="周五" />
			<low data="0" />
			<high data="11" />
			<icon data="/ig/images/weather/mostly_sunny.gif" />
			<condition data="以晴为主" />
		</forecast_conditions>

		<forecast_conditions>
			<day_of_week data="周六" />
			<low data="1" />
			<high data="13" />
			<icon data="/ig/images/weather/mostly_sunny.gif" />
			<condition data="以晴为主" />
		</forecast_conditions>
	</weather>
</xml_api_reply>

这里面包含了我们需要的天气信息.

    <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1"
        row="0" section="0">

    </weather>
根节点是<weather>  </weather> 这里面包含的信息我们有点看不明白.我们暂时不用去考虑这些.

接下来我们看下根节点下面的几个个节点

		<forecast_information>
			<city data="Beijing, Beijing" />
			<postal_code data="Beijing" />
			<latitude_e6 data="" />
			<longitude_e6 data="" />
			<forecast_date data="2012-03-21" />
			<current_date_time data="2012-03-21 16:00:00 +0000" />
			<unit_system data="SI" />
		</forecast_information>

这个节点包含的是请求城市的一些信息.

节点下边有这几个标签:

标签名称 标签意义 数据类型
city 城市名称 String
postal_code 请求的名称 String
latitude_e60 纬度坐标 float
longitude_e60 经度坐标 float
forecast_data 预报时间 String
current_data_time 当前时间 String
unit_system 单位格式 String


我们在接着看下一个节点

                 <current_conditions>
			<condition data="雨" />
			<temp_f data="41" />
			<temp_c data="5" />
			<humidity data="湿度: 76%" />
			<icon data="/ig/images/weather/cn_heavyrain.gif" />
			<wind_condition data="风向: 东南、风速:2 米/秒" />
		</current_conditions>
这个节点包含的是当前的天气信息.

     节点下边有这几个标签:

标签名称 标签意义 数据类型
condition 天气状况 String
temp_f 华氏温度 float
temp_c 摄氏温度 float
humidity 湿度 String
icon 天气状况的图标 String
wind_condition 风向风力 String

我们再接着看下一个节点:

		<forecast_conditions>
			<day_of_week data="周三" />
			<low data="3" />
			<high data="13" />
			<icon data="/ig/images/weather/mostly_sunny.gif" />
			<condition data="晴间多云" />
		</forecast_conditions>

该节点包含了预报的天气信息,也就是未来几天的天气状况

 该节点下面包含了这样几个标签


标签名称 标签意义 数据类型
day_of_week 星期几 String
low 最低温度 float
high 最高温度 float
icon 天气状况的图标 String
condition 天气状况 String

API的数据分析到此告一段落了.

API的数据分析完成后,接下来我们就要对XML文档进行数据的解析,获取到xml文档中的数据.


而在XML解析之前呢,我们应该创建一个值对象,也就是实体类来存放我们解析出来的数据.

我们准备创建三个实体类来存放不同的数据.

CityInfo.java 存放城市信息.

CurrInfo.java 存放当前天气信息

ForeInfo.java 存放预报信息


CityInfo.java

package com.yongchun.weather.model;

/**
 * 作者:肥鱼 QQ群:104780991 Email:zhaoyongchun2011@gmail.com
 * 关于:一条致力于Android开源事业的鱼,还是肥的.吃得多赚的少还不会暖床,求包养.
 */
public class CityInfo {
	private String city_name;
	private String postal_code;
	private float latitude;
	private float longitude;
	private String forecast_time;
	private String current_time;
	private String unit_syetem;

	public String getCity_name() {
		return city_name;
	}

	public void setCity_name(String city_name) {
		this.city_name = city_name;
	}

	public String getPostal_code() {
		return postal_code;
	}

	public void setPostal_code(String postal_code) {
		this.postal_code = postal_code;
	}

	public float getLatitude() {
		return latitude;
	}

	public void setLatitude(float latitude) {
		this.latitude = latitude;
	}

	public float getLongitude() {
		return longitude;
	}

	public void setLongitude(float longitude) {
		this.longitude = longitude;
	}

	public String getForecast_time() {
		return forecast_time;
	}

	public void setForecast_time(String forecast_time) {
		this.forecast_time = forecast_time;
	}

	public String getCurrent_time() {
		return current_time;
	}

	public void setCurrent_time(String current_time) {
		this.current_time = current_time;
	}

	public String getUnit_syetem() {
		return unit_syetem;
	}

	public void setUnit_syetem(String unit_syetem) {
		this.unit_syetem = unit_syetem;
	}

}

CurrInfo.java

package com.yongchun.weather.model;

/**
 * 作者:肥鱼 QQ群:104780991 Email:zhaoyongchun2011@gmail.com
 * 关于:一条致力于Android开源事业的鱼,还是肥的.吃得多赚的少还不会暖床,求包养.
 */
public class CurrInfo {
	private String condition;
	private float temp_f;
	private float temp_c;
	private String humidity;
	private String icon;
	private String wind_condition;

	public String getCondition() {
		return condition;
	}

	public void setCondition(String condition) {
		this.condition = condition;
	}

	public float getTemp_f() {
		return temp_f;
	}

	public void setTemp_f(float temp_f) {
		this.temp_f = temp_f;
	}

	public float getTemp_c() {
		return temp_c;
	}

	public void setTemp_c(float temp_c) {
		this.temp_c = temp_c;
	}

	public String getHumidity() {
		return humidity;
	}

	public void setHumidity(String humidity) {
		this.humidity = humidity;
	}

	public String getIcon() {
		return icon;
	}

	public void setIcon(String icon) {
		this.icon = icon;
	}

	public String getWind_condition() {
		return wind_condition;
	}

	public void setWind_condition(String wind_condition) {
		this.wind_condition = wind_condition;
	}

}
ForeInfo.java

package com.yongchun.weather.model;

/**
 * 作者:肥鱼 QQ群:104780991 Email:zhaoyongchun2011@gmail.com
 * 关于:一条致力于Android开源事业的鱼,还是肥的.吃得多赚的少还不会暖床,求包养.
 */
public class ForeInfo {

	private String day_of_week;
	private float low;
	private float high;
	private String icon;
	private String condition;

	public String getDay_of_week() {
		return day_of_week;
	}

	public void setDay_of_week(String day_of_week) {
		this.day_of_week = day_of_week;
	}

	public float getLow() {
		return low;
	}

	public void setLow(float low) {
		this.low = low;
	}

	public float getHigh() {
		return high;
	}

	public void setHigh(float high) {
		this.high = high;
	}

	public String getIcon() {
		return icon;
	}

	public void setIcon(String icon) {
		this.icon = icon;
	}

	public String getCondition() {
		return condition;
	}

	public void setCondition(String condition) {
		this.condition = condition;
	}

	// @Override
	// public String toString() {
	// // TODO Auto-generated method stub
	// String forecastInfo = "时间:" + day_of_week + "\n最低温度:"
	// + Float.toString(low) + "\n最高温度:" + Float.toString(high)
	// + "\n图标路径:" + icon + "\n天气状况:" + condition;
	// return super.toString();
	// }

}


阅读更多
个人分类: 菜鱼的Android之路
上一篇Android 广播的用法示例
下一篇缅怀一下肥鱼逝去的青春,悼念一下肥鱼苦逼的生活.
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭