android天气预报获取-气象台webservice
一、之前项目需要获取天气预报,然而各个API对免费访问次数都有限制,试了很多种方法,决定使用气象台webservice获取。
二、气象台服务的大概情况:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx是由中国气象台提供的通过webservice获取天气预报Web服务,据每2.5小时左右自动更新一次,准确可靠。包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据。WebService上提供了多个方法,我们这里要查的是国内城市的天气预报,就用getWeatherbyCityName 这个方法,调用方法如下:输入参数:theCityName = 城市中文名称(国外城市可用英文)或城市代码(不输入默认为上海市),如:上海 或 58367,如有城市名称重复请使用城市代码查询(可通过 getSupportCity 或 getSupportDataSet 获得);返回数据是一个xml形式的数据,用工具解析一下就行了。获取数据的方式也有多种,比如http post/get/soap等,想了解多种方式的可以去webservice上看一下,我用的是http get方法,比较方便。
三、这种方法的优缺点:
1.优点:
1)虽然这种方法仍有访问限制,但由于这种方法不需要传访问Key,访问次数是根据访问IP统计的,所以每台手机每天访问次数都是足够的。PS:这个问题是我在一天不停调试该App请求太多次发现的,一般用户不会没事每天不停打开你的应用,所以这种影响可以忽略;要是你在调试过程中发生这种情况,也可以直接重启设备,又可以正常访问了。
2)返回的数据格式固定(暂时没发现格式变化)而且,我的这种方式访问回来的是xml格式的数据,自己用工具解析一下就好了。
3)输入参数是城市的中文名称,无需用城市代码转换。
2.缺点:
1)因为是免费的服务,所以比付费的服务相对不稳定,我完成到现在两个月的时间,只发现有两天是显示系统维护而取不到数据的。
2)不确定这个服务什么时候会被关闭,所以还是比较适合刚起步的应用或者个人开发。
四、代码:
首先要说明的是,我这里是根据项目需要来解析数据的,我这里只是取了现在的温度和对应的天气图标,但是返回的数据有今明两天比较具体的数据,后面再把数据贴出来。
<pre name="code" class="java">/**获取天气*/private void loadWeather(){new Thread(runNow).start();}Runnable runNow =new Runnable(){@Overridepublic void run() {try {URL url = new URL(WSDL + cityname);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setConnectTimeout(5*1000);conn.setRequestMethod("GET");InputStream inStream = conn.getInputStream(); XmlPullParser parser = AbstractPullParser.createXmlPullParser(inStream);List<String> weatherList = new ArrayList<String>();int event = parser.getEventType();while (event != XmlPullParser.END_DOCUMENT && event != XmlPullParser.END_TAG) {switch (event) {case XmlPullParser.START_DOCUMENT:break;case XmlPullParser.START_TAG:if ("string".equalsIgnoreCase(parser.getName())) {weatherList.add(parser.nextText());}break;default:break;}event = parser.next();}if(weatherList.size() > 0){ tempStr = weatherList.get(10);Pattern pattern = Pattern.compile("[0-9]*℃");Matcher matcher = pattern.matcher(tempStr);if(matcher.find()){tempStr = matcher.group(0);}else{tempStr = "";}Message msg =new Message(); msg.what = 1;msg.obj = getImageBitMap(weatherList.get(9));mHandler.sendMessage(msg);}else{Message msg =new Message(); msg.what = 0;msg.obj = GONE;mHandler.sendMessage(msg);}} catch (Exception e) {Message msg =new Message(); msg.what = 0;msg.obj = GONE;mHandler.sendMessage(msg);}}};/**获取天气之后更新UI*/Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: setVisibilityView(GONE); break; case 1: setVisibilityView(VISIBLE);weatherTv.setText(tempStr);weatherimageM.setImageBitmap((Bitmap) msg.obj);break; default: break; } } }; /**获取assets图片*/private Bitmap getImageBitMap(String name){String fileName = "weatherIconNew/"+name;Bitmap image = null; AssetManager am = getResources().getAssets(); try{ InputStream is = am.open(fileName); image = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e){ e.printStackTrace(); }return image; }
五、返回数据解析:
返回的数据:
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
<string>广东</string>
<string>广州</string>
<string>59287</string>
<string>59287.jpg</string>
<string>2016-4-16 17:01:04</string>
<string>22℃/27℃</string>
<string>4月16日 小雨</string>
<string>无持续风向微风</string>
<string>7.gif</string>
<string>7.gif</string>
<string>今日天气实况:气温:27℃;风向/风力:东南风 2级;湿度:79%;紫外线强度:最弱。空气质量:良。</string>
<string>
紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。 感冒指数:较易发,天凉,湿度大,较易感冒。 穿衣指数:舒适,建议穿长袖衬衫单裤等服装。 洗车指数:不宜,有雨,雨水和泥水会弄脏爱车。 运动指数:较不宜,有降水,推荐您在室内进行休闲运动。 空气污染指数:良,气象条件有利于空气污染物扩散。
</string>
<string>19℃/27℃</string>
<string>4月17日 中到大雨</string>
<string>无持续风向微风</string>
<string>22.gif</string>
<string>22.gif</string>
<string>19℃/24℃</string>
<string>4月18日 阴转多云</string>
<string>无持续风向微风</string>
<string>2.gif</string>
<string>1.gif</string>
<string>
广州是广东省的省会,是中国南方最大的海滨城市,广州位于东经113。17`,北纬23。8`,地处中国大陆南部,广东省南部,珠江三角洲北缘。广州临南海,邻近香港特别行政区,是中国通往世界的南大门,广州属丘陵地带。中国的第三大河----珠江从广州市中心穿流而过。广州是一座历史文化名城。相传在远古时候,曾有五位仙人,身穿五色彩服、骑着嘴衔稻穗的五色仙羊降临此地,把稻穗赠给百姓,祝愿这里永无饥荒。从此,广州便有“羊城”、“穗城”的美称,“五羊”也成为广州的象征。广州既是中国也是世界名城,又是一座古城,因历史上有五羊仙子降临献稻穗的故事,广州又称为“羊城”和“穗城”,简称“穗”;广州一年四季如春、繁花似锦,除夕迎春花市闻名海内外,故又有“花城”的美誉。广州地处低纬,属南亚热带季风气候区。地表接受太阳辐射量较多,同时受季风的影响,夏季海洋暖气流形成高温、高湿、多雨的气候;冬季北方大陆冷风形成低温、干燥、少雨的气候。年平均气温为21.4-21.9度,年降雨量平均为1623.6-1899.8mm,北部多于南部。1982年,广州被国务院选定为全国首批历史文化名城之一,是我国重点旅游城市。1999年1月,广州被评为优秀旅游城市。景观:白云山、莲花山、南海神庙、佛山祖庙、广州动物园等。
</string>
</ArrayOfString>
返回的数据是今明两天的数据,个人调用至今数据的格式还没变过,所以暂时还能放心使用。我这里是将XML的数据解析进List里面,在
<string>今日天气实况:气温:27℃;风向/风力:东南风 2级;湿度:79%;紫外线强度:最弱。空气质量:良。</string>
中通过正则表达式获取当前温度,当然需要温度范围的就比较简单,直接获取就好。具体的数据解析就不细说了,自己看着返回的数据解析吧。
在这里还要说一下天气的图标使用,http://www.webxml.com.cn/zh_cn/weather_icon.aspx这个地址是图标的说明,需要自定义图标的可根据图标的天气解释自己做一些图标,然后改成对应的名字即可。
android天气预报获取-气象台webservice相关推荐
- Android studio获取服务器端json数据——天气预报(仅读取了json文件尚未分析)
Android studio获取服务器端json数据--天气预报 MainActivity.java import androidx.appcompat.app.AppCompatActivity;i ...
- Android之通过向WebService服务器发送XML数据获取相关服务
原理图如下: 即客户端向WebService服务器通过HTTP协议发送XML数据(内部包含调用的一些方法和相关参数数据),然后WebService服务器给客户端返回一定的XML格式的数据,客户端通过解 ...
- Android天气预报开发
Android天气预报开发(2) 在上节我们讲到了Android天气预报开发的数据该怎么获取,在看了上节的具体介绍,我们就知道了要从哪里拿数据,该如何拿数据?当拿到数据后我们就可以进行进一步的开发了. ...
- Android 天气预报源码
2019独角兽企业重金招聘Python工程师标准>>> 这是一个Android 天气预报的源码,有兴趣的可以看看! 关于天气的源码: 转载:http://www.adobex.com ...
- Android实例]------获取sd卡图片显示出来
[Android实例] 获取sd卡图片显示出来 ON 六 02 2012 IN ANDROID代码仓库, ANDROID项目代码 BY ANDROID智能手机 | 评论 package com.fil ...
- android如何获取listview中的任意行数据
android如何获取listview中的任意行数据 @Override public void onItemClick(AdapterView<?> arg0, View arg1, i ...
- android camera2获取摄像头支持的分辨率
android camera2 获取摄像头支持的分辨率 41的for循环我注释了,代码是获取最匹配的分辨率. private Size getMatchingSize2(){Size selectSi ...
- android url webview,android - webview获取到当前页面的url
android - webview获取到当前页面的url 2017-10-23 08:54 访问量: 2958 分类: 技术 使用 webview.getUrl() 即可. 可以完美返回 a.com ...
- Android杂谈---获取手机屏幕大小
Android杂谈---获取手机屏幕大小 SurfaceView简单例子 玩转Android---UI篇---ZoomControls放大缩小图片 更多相关推荐 这里总结下android中关于手机屏幕 ...
最新文章
- linux 下,解决tomcat服务器接收中文乱码的问题
- numpy ndarray.tostring()(在数组中构造包含原始数据字节的Python字节)(tobytes()函数的兼容性别名)
- 为什么 Rust 连续 4 年获「最受喜爱编程语言」?
- windows “文件大小”与“占用空间”、文件系统与文件拷贝
- 第四讲 移动互联网接入技术
- ydui滚动加载:TypeError: Cannot read property '$emit' of undefined
- 牛客网--23803--DongDong认亲戚
- __DSB()指令的作用
- Day739.GEO经纬度数据结构自定义数据结构 -Redis 核心技术与实战
- Additive smoothing
- win7下通过easyBCD引导安装Ubuntu14.04(补充完善版)
- NS2 队列管理机制
- 华为OD机试真题2022(JAVA)
- 网络基础:套接字编程,UDP和TCP通信程序
- 明光市机器人_明光市情侣酒店客房语音智能控制系统厂家
- 逃脱只会部署集群系列 —— Kubeadm部署v1.18.0与ETCD操作
- 值得纪念的一天,终于进了大厂
- 云服务器维护成本,云服务器维护成本
- html 多层画布,HTML画布——canvas
- 2021年春招首发!阿里云云原生实习一二三面面经,看完的都进阿里了!