Android获取天气预报的两种方式(国家气象局和中央气象台天气预报API)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在项目中有一个天气预报的需求,在网上找了找大部分人给出的建议是使用webservice方式来获取数据。于是就尝试着做了一下,真是不做不知道,做了就收获了很多。

首先,来说一下通过webservice来获取国家气象局提供的天气服务

在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。适合手机的WebService客户端的SDK有一些,比较常用的是KSOAP2。(强烈建议大家去官网上下载http://code.google.com/p/ksoap2-android/。博主之前随便找了一个,结果是引用的sdk存在问题。坑死人啊。)注意,一定要下载正确的jar包。
http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar 点 View raw file 正确下载对应文件。



好了,下面直接上代码(这里只做简单的介绍)


public class MyWeather extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		//展现天气预报的具体数据
		showWeather("北京");
			
	}
	//展现天气预报的具体数据
	private void showWeather(String city)
	{
		String weatherToday = null;
		int iconToday[] = new int[2];

		// 获取远程Web Service返回的对象
		SoapObject detail = WebServiceUtil.getWeatherByCity(city);// 根据城市获取城市具体天气情况
		// 获取天气实况
		weatherCurrent = detail.getProperty(4).toString();
		// 解析今天的天气情况
		String date = detail.getProperty(7).toString();
		weatherToday = "今天:" + date.split(" ")[0];
		weatherToday = weatherToday + "\n天气:" + date.split(" ")[1];
		weatherToday = weatherToday + "\n气温:"
			+ detail.getProperty(8).toString();
		weatherToday = weatherToday + "\n风力:"
			+ detail.getProperty(9).toString() + "\n";
		iconToday[0] = parseIcon(detail.getProperty(10).toString());
		iconToday[1] = parseIcon(detail.getProperty(11).toString());
		
	}

	// 工具方法,该方法负责把返回的天气图标字符串,转换为程序的图片资源ID。
	private int parseIcon(String strIcon)
	{
		if (strIcon == null)
			return -1;
		if ("0.gif".equals(strIcon))
			return R.drawable.a_0;
		if ("1.gif".equals(strIcon))
			return R.drawable.a_1;
		if ("2.gif".equals(strIcon))
			return R.drawable.a_2;
		if ("3.gif".equals(strIcon))
			return R.drawable.a_3;
		if ("4.gif".equals(strIcon))
			return R.drawable.a_4;
		if ("5.gif".equals(strIcon))
			return R.drawable.a_5;
		if ("6.gif".equals(strIcon))
			return R.drawable.a_6;
		if ("7.gif".equals(strIcon))
			return R.drawable.a_7;
		if ("8.gif".equals(strIcon))
			return R.drawable.a_8;
		if ("9.gif".equals(strIcon))
			return R.drawable.a_9;
		if ("10.gif".equals(strIcon))
			return R.drawable.a_10;
		if ("11.gif".equals(strIcon))
			return R.drawable.a_11;
		if ("12.gif".equals(strIcon))
			return R.drawable.a_12;
		if ("13.gif".equals(strIcon))
			return R.drawable.a_13;
		if ("14.gif".equals(strIcon))
			return R.drawable.a_14;
		if ("15.gif".equals(strIcon))
			return R.drawable.a_15;
		if ("16.gif".equals(strIcon))
			return R.drawable.a_16;
		if ("17.gif".equals(strIcon))
			return R.drawable.a_17;
		if ("18.gif".equals(strIcon))
			return R.drawable.a_18;
		if ("19.gif".equals(strIcon))
			return R.drawable.a_19;
		if ("20.gif".equals(strIcon))
			return R.drawable.a_20;
		if ("21.gif".equals(strIcon))
			return R.drawable.a_21;
		if ("22.gif".equals(strIcon))
			return R.drawable.a_22;
		if ("23.gif".equals(strIcon))
			return R.drawable.a_23;
		if ("24.gif".equals(strIcon))
			return R.drawable.a_24;
		if ("25.gif".equals(strIcon))
			return R.drawable.a_25;
		if ("26.gif".equals(strIcon))
			return R.drawable.a_26;
		if ("27.gif".equals(strIcon))
			return R.drawable.a_27;
		if ("28.gif".equals(strIcon))
			return R.drawable.a_28;
		if ("29.gif".equals(strIcon))
			return R.drawable.a_29;
		if ("30.gif".equals(strIcon))
			return R.drawable.a_30;
		if ("31.gif".equals(strIcon))
			return R.drawable.a_31;
		return 0;
	}
}

但是,多次运行项目之后,获取不到数据了。经过查找原来中国气象局提供的服务分为付费和免费的。而免费的每天有一定的访问次数限制。将应用安装到其他手机上也无济于事。并且免费的有时也不是很稳定,所以只能用其他服务了。


下面就来说一下访问中央气象台的天气预报API得到天气数据


使用这个服务唯一的缺点就是获取对应的城市码,这个有点麻烦(不过可以在这里下载http://download.csdn.net/tag/%E4%B8%AD%E5%9B%BD%E5%A4%A9%E6%B0%94%E7%BD%91%E5%9F%8E%E5%B8%82%E4%BB%A3%E7%A0%81%E6%95%B4%E7%90%86%E7%89%88.txt)其它的如稳定性与广阔性也是很一流的,它可以精确到县和区.下面就直奔主题:


这个服务的天气预报的请求地址是:http://m.weather.com.cn/data/101091106.html,这个文本就是城市天气URL,101091106代表的为对应地区的编码,执行URL,得到一个返回文本,是JSON格式的,如下(经过格式化):


{"weatherinfo":
			{"city":"北戴河",
			"city_en":"beidaihe",
			"date_y":"2013年7月31日",
			"date":"",
			"week":"星期三",
			"fchh":"18",
			"cityid":"101091106",
			"temp1":"23℃~28℃",
			"temp2":"23℃~27℃",
			"temp3":"25℃~28℃",
			"temp4":"25℃~30℃",
			"temp5":"25℃~29℃",
			"temp6":"25℃~28℃",
			"tempF1":"73.4℉~82.4℉",
			"tempF2":"73.4℉~80.6℉",
			"tempF3":"77℉~82.4℉",
			"tempF4":"77℉~86℉",
			"tempF5":"77℉~84.2℉",
			"tempF6":"77℉~82.4℉",
			"weather1":"晴转雷阵雨",
			"weather2":"小雨",
			"weather3":"中雨转小雨",
			"weather4":"小雨",
			"weather5":"多云转晴",
			"weather6":"晴转阴",
			"img1":"0",
			"img2":"4",
			"img3":"7",
			"img4":"99",
			"img5":"8",
			"img6":"7",
			"img7":"7",
			"img8":"99",
			"img9":"1",
			"img10":"0",
			"img11":"0",
			"img12":"2",
			"img_single":"4",
			"img_title1":"晴",
			"img_title2":"雷阵雨",
			"img_title3":"小雨",
			"img_title4":"小雨",
			"img_title5":"中雨",
			"img_title6":"小雨",
			"img_title7":"小雨",
			"img_title8":"小雨",
			"img_title9":"多云",
			"img_title10":"晴",
			"img_title11":"晴",
			"img_title12":"阴",
			"img_title_single":"雷阵雨",
			"wind1":"微风",
			"wind2":"微风",
			"wind3":"西南风3-4级",
			"wind4":"微风",
			"wind5":"微风",
			"wind6":"东南风转西南风3-4级",
			"fx1":"微风",
			"fx2":"微风",
			"fl1":"小于3级",
			"fl2":"小于3级",
			"fl3":"3-4级",
			"fl4":"小于3级",
			"fl5":"小于3级",
			"fl6":"3-4级",
			"index":"热",
			"index_d":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。",
			"index48":"舒适","index48_d":"建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。",
			"index_uv":"弱","index48_uv":"最弱",
			"index_xc":"不宜","index_tr":"一般","index_co":"较不舒适",
			"st1":"26","st2":"23","st3":"25","st4":"21","st5":"25","st6":"21",
			"index_cl":"较不宜","index_ls":"不宜","index_ag":"极不易发"
			}
}

部分参数说明:temp1~6表示六天的最低温和最高温、tempF1~tempF6:表示华氏温度
Img1~img2表示今天白天、晚上的天气图标、img3~img4表示明天白天、晚上的天气图标。。。

然后就是获取这些字符串了,这里就不介绍了。


主要向大家介绍一下jsonObject类(http://henzil.easymorse.com/?p=242)


JSONObject jsonObject = new JSONObject(jsonString)..getJSONObject("weatherinfo");其中的jsonString就是获取的字符串

例如得到天气图片
String imgurl = jsonObject.getString("img1");然后通过这个拼串就可以得到图片了
http://m.weather.com.cn/img/b+ imgurl +".gif"

上面就是两种方式获取天气情况了,欢迎大家给出意见或建议


andriod 风天气SDK获取实时天气(保姆级教程) 之前都是使用API获取天气数据,也可以,但SDK会了以后,更加简单直接。而且功能也比API更强大,代码更简洁。下面是我折腾差不多一周的成果,这些会了之后,获取天气预报,显示城市,天气图标什么的也都能简单的完成。今天先把这个发出去,过两天把其他 的做完了再发。 因为风的天气代码json格式不断的变,所以以下代码适用于4.8版SDK,其他版本我找到了不少,基本都不适用。因为我对JAVA几乎不懂,经过自己不断实验、摸索,最后成功。所以代码肯定不好看,很多也是抄别人的,但不是抄一个人的,所以这里表示感谢, 阅读详情

相关推荐

Android趣味课程:简易天气预报功能

在某些应用程序中,经常有天气预报的功能,通过当地天气情况给予用户合适的建议。比如团购网站根据定位,天气推送用户需要的信息等。本篇博客会使用公共api当中天气预报接口信息,编写一个简易天气预报的界面。 获取天气信息接口如下: http://api.map.baidu.com/telematics/v3/weather?location=九江&output=json&ak=FkPh...

u012156341的专栏 3379

Android制作天气预报 —— 查询城市信息

首先将县所在元素中的parentid逐个与各元素中的cityid进行比较,存在相同情况说明该县是属于该市管辖,例如霍林郭勒市的parentid与通辽的cityid相同,说明霍林郭勒市由通辽市管辖。onPostExecute()中,如图3-9所示,将openConnect()访问得到的结果(result)以及用户输入的城市Id(input_text)作为参数传给parseCities(),并调用其对访问得到的JSON数据进行解析,找到解析中与输入城市Id相对应的城市信息输出并存入listems中。

weixin_58963766的博客 688

Android天气预报 简单Demo

最近在群里总是看到有人问到关于andro客户端如何webService结合。 其中最多的就是关于实现天气预报这个应用的。但是群里很少有人回答, 我觉得可能那些大牛很忙,觉得实现这个不是很难,没有人去提示他们。 所以,像我们这种菜鸟 有的是时间,今天就把大体的实现思路写一下。 ,不废话了,先上图。 在这里我只写一下主要的步骤,至于源码会在最后给出。(其实源码写现在看来写的真的

谁人曾记负你多,一笑风云过 3397

利用中央气象台API获取天气

小项目算是用三层结构来构架,最上面一层就不写了,直接在service层测试。 中央气象台的接口标准文档我没找到,所以也是参照了别人的应用自己写了一个。。 目录结构为: 这个是根节点 http://flash.weather.com.cn/wmaps/xml/china.xml 返回的表的结构式一定的,所以我直接配置到了本地 如下: province.xml <...

ithome 517

android自动获取天气,Android获取天气预报两种方式国家气象局中央气象台天气预报API)...

在项目中有一个天气预报的需求,在网上找了找大部分人给出的建议是使用webservice方式获取数据。于是就尝试着做了一下,真是不做不知道,做了就收获了很多。首先,来说一下通过webservice来获取国家气象局提供的天气服务在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。适合手机的WebService客户端的SDK有一些,...

weixin_34898216的博客 3459

android天气api接口,[Android] 免费天气预报接口

[Android] 免费天气预报接口这是 国家气象局提供的天气预报接口 [免费]当然,网上有很多的收费API或者每天定次数的接口使用 国家气象局 的步骤如下:1、首先获取城市ID号北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800丰台:101010900石景山:101011000大...

weixin_32093689的博客 1190

中国国家气象局天气预报信息接口

想在自己的android应用中获得当天的天气情况,这该怎么做呢?不用担心。中国国家气象局提供了获取所在城市天气预报信息接口。通过这个接口,我们就可以获取天气信息了。 中国国家气象局天气预报接口总共提供了三个: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityin

by2n的专栏 2603

android 天气相关API及使用教程

Android使用”中国天气网”API数据通过城市名称获取天气情况 Android获取天气预报两种方式国家气象局中央气象台天气预报API) 天气API接口大全(nohacks.cn 收集整理) 空气质量PM25 Android获取PM2.5的数据

qiotn的专栏 799

国家气象局天气预报接口JSON完全解析

最近由于谷歌天气预报接口出现了一些小问题,没办法,只能重新写一下国家气象局天气预报接口JSON完全解析,程序包括了所有的地点,所以有些复杂 1.首先准备好要解析的json数据,方便以后写程序解析的时候,直接进行分析。如下 [html] view plaincopyprint? {   "weatherinfo":                  {

liujianminghero的专栏 6万+

使用json解析国家气象局天气预报)接口数据

平时我们在开发的过程中有时会要用到天气预报的信息,国家气象局为我们提供了天气预报的接口,只需要我们去解析就行了。很方便很好用       那么下面,我们开始吧!   国家气象局提供了三种数据的形式   网址在: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinf

2800

Android国家气象局天气预报接口JSON完全解析

最近由于谷歌天气预报接口出现了一些小问题,没办法,只能重新写一下国家气象局天气预报接口JSON完全解析,程序包括了所有的地点,所以有些复杂 1.首先准备好要解析的json数据,方便以后写程序解析的时候,直接进行分析。如下 查看文本打印? {   "weatherinfo":                   {

HMYANG314的专栏 8959

[Android] 免费天气预报接口

[Android] 免费天气预报接口 这是 国家气象局提供的天气预报接口 [免费] 当然,网上有很多的收费API或者每天定次数的接口 使用 国家气象局 的步骤如下: 1、首先获取城市ID号 北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800丰台:10...

weixin_38166557的博客 451

国家气象局提供的天气预报接口

最近一直在做天气方面的android软件,分别从三个网站(新浪天气api,百度开放平台天气,国家气象中心)获取天气资源。发现网上前辈们提供的“国家气象局提供的天气预报接口”地址已过时。本人找了好久才找到,希望对大家有用! 国家气象局提供的天气预报接口:http://m.weather.com.cn/atad/101020100.html {     "weatherinfo": {  

qq_23515691的专栏 616

想在自己的android应用中获得当天的天气情况,这该怎么做呢?不用担心。中国国家气象局提供了获取所在城市天气预报信息接口。通过这个接口,我们就可以获取天气信息了。

中国国家气象局天气预报接口总共提供了三个:http://www.weather.com.cn/data/sk/101010100.htmlhttp://www.weather.com.cn/data/cityinfo/101010100.htmlhttp://m.weather.com.cn/data/101010100.html最详细的信息来自第三个接口。上面url中的101010100是城市代

qq_16490557的专栏 2232

eoLinker-API_Shop_天气类API调用的代码示例合集:全国天气预报

以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务。 全国天气预报:数据来自国家气象局,可根据地名、经纬度GPS、IP查询对应地区的预报。 实时空气质量数据查询:空气质量实时发布的数据 PM2.5空气质量指数:支持全国367个城市空气质量指数,提供实时空气质量情况,每小时更新,服务支持功能包括:实时查询空气质量,小...

API-Shop的博客 526

Android国家气象局提供的天气预报接口(完整Json接口)

国家气象局提供的天气预报接口主要有三个,分别是: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.html http://m.weather.com.cn/data/101010100.html 其中详细接口为:http://m.weathe

HMYANG314的专栏 1万+
上一篇: Android简单发送邮件(可带附件)
下一篇: Java版纯字母、纯数字、字母数字组合验证码的生成
aboy123
博客等级 码龄15年 416粉丝 107原创
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值