Android开发点滴(七) 改进版天气预报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zfs2008zfs/article/details/52884787

《第一行代码》第十四章是实战开发,编写一个名字叫CoolWeaher的天气预报App,这个APP几乎用到前面学过的所有知识点,是个非常好的实战例子。经过时间的推移,这一章中介绍的某些方法已不可行。变化如下:
1、书中获取城市列表是从http://www.weather.com.cn/data/list**.html这样的网站,但目前该网站已经不再提供这样的服务
2、书中获取天气信息也是从http://www.weather.com.cn/data/cityinfo**.html这样的网站,但目前该网站已经不再提供这样的服务

因此,对书中的实战例子进行了改进,改进地方如下:
1、从http://flash.weather.com.cn/wmaps/xml/china.xml获取全国城市列表,解析xml格式文件,根据每个省对应的pyName信息,访问http://flash.weather.com.cn/wmaps/xml/guangdong.xml这样的链接,可以获取省、市、县三级信息,并且可以获取县的城市ID,每次查询后把结果保存到数据库(这是书中已有的功能)
2、目前网上可以搜到很多天气预报数据服务提供者,有收费的,也有免费的,其中免费的有
http://www.heweather.com/documents/api-sample
http://developer.baidu.com/map/wiki/index.php?title=car/api/weather
http://apistore.baidu.com/apiworks/servicedetail/112.html等等,
我选择的是http://www.heweather.com/documents/api-sample,这个网站需要注册并申请key,把上一步获取到的城市ID作为参数,就可以收到json格式的天气信息了,包括未来七天的天气、小时天气预报、以及穿衣指数等,数据还是非常全的。
3、增加了显示当前位置天气的功能。实现思路是,第一步:通过Andoird的位置服务获取当前所处的经纬度,根据经纬度在http://api.map.baidu.com/geocoder/v2/ 进行逆地址解析,获取当前所处的省市县信息,返回JSON格式的结果如(“province”:”北京市”,”city”:”北京市”,”district”:”海淀区”)。这一步需要在百度开发者服务中心申请ak,申请步骤见《第一行代码》第11章,如果使用AndroidStudio的话,开发者提供SHA1证书指纹数据获取方法可参考http://blog.csdn.net/kezhongke/article/details/42678077或者参考下图:

第二步:根据district信息从http://apistore.baidu.com/apiworks/servicedetail/112.html查询城市ID,(当然,首先可以从数据库中查询,如果查询不到再联网查询,目前并未实现这一功能),使用baidu的apistore也是需要申请apikey的,方法较为简单。
第三步:根据城市ID从http://www.heweather.com查询天气

改进后的天气预报App界面如下:
这里写图片描述

改进版源码链接:https://github.com/antivice/coolweather
注意,本文中查询数据使用的天气预报接口或城市信息查询接口有可能升级或失效!代码中的key都不是有效值,如果需要编译,请自行申请apikey并修改相关代码!

猜你喜欢

转载自blog.csdn.net/zfs2008zfs/article/details/52884787
今日推荐