博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android天气查询(一)websevice之ksoap2软件包的使用
阅读量:6438 次
发布时间:2019-06-23

本文共 4986 字,大约阅读时间需要 16 分钟。

对于用到天气信息,首先我想:

 

第一:数据不可能是我测得的,必须是网上的信息。

第二:网上的信息分为好多种,具体哪种比较好一点,这里我总结了两种。

第三:数据JSON怎么解析。

第四:如何提出数据与显示。

完成了上述步骤,那么我们就完成了基本是天气信息获取。

1.数据信息源                                               

   数据信息源直接关乎着你要实现的功能,没有数据功能是不可能实现的,当然自己测量也是不现实的,参考一些网上信息,同时自己也写了两个demo。

2.网上数据源第一种分析                                       

第一种,webService来获取国家气象局提供的天气服务:

  我们可以点击getWeather,来获取一下天气信息,同时也了解一下他的排布格式。

点击之后,出现如下界面,同时网页上也会有对应的SOAP1.1和SOAP1.2协议:

查看对应北京的天气信息,这里我就不粘了,点击调用即可。好的下面我们了解一下这种天气信息获取的方式。

此项服务是由,上海思集信息科技有限公司提供:

是一种有局限性的数据,连续获取是行不通的,获取过多也是行不通的,接下来说一下这个的实现方法:

2.1 程序代码的实现                                                     

(1)引入ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar软件包,这样我们就不用自己去解析SOAP1.1协议了,封装类已经提供了解释方法。

(2)编写与封装ksoap2对应的代码,这里我们粘贴就好,一般不需要我们去改动。源码中的WebServiceUtil就是。这里我就不贴了。

(3)编写对应的获取程序并显示

protected void refresh(String city_str){	SoapObject detail = WebServiceUtil.getWeatherByCity(city_str);	try	{		// 取得
10月13日 中雨转小雨
中的数据 String date = detail.getProperty(7).toString(); // 将"10月13日 中雨转小雨"拆分成两个数组 String[] date_array = date.split(" "); TextView today_text = (TextView) findViewById(R.id.today); today_text.setText(date_array[0]); // 取得
江苏 无锡
中的数据 TextView city_text = (TextView) findViewById(R.id.city_text); city_text.setText(detail.getProperty(1).toString()); TextView today_weather = (TextView) findViewById(R.id.today_weather); today_weather.setText(date_array[1]); // 取得
15℃/21℃
中的数据 TextView qiweng_text = (TextView) findViewById(R.id.qiweng); qiweng_text.setText(detail.getProperty(8).toString()); // 取得
今日天气实况:气温:20℃;风向/风力:东南风 // 2级;湿度:79%
中的数据,并通过":"拆分成数组 TextView shidu_text = (TextView) findViewById(R.id.shidu); String date1 = detail.getProperty(4).toString(); shidu_text.setText(date1.split(":")[4]); // 取得
东北风3-4级
中的数据 TextView fengli_text = (TextView) findViewById(R.id.fengli); fengli_text.setText(detail.getProperty(9).toString()); // 取得
空气质量:良;紫外线强度:最弱
中的数据,并通过";"拆分,再通过":"拆分,拆分两次,取得我们需要的数据 String date2 = detail.getProperty(5).toString(); String[] date2_array = date2.split(";"); TextView kongqi_text = (TextView) findViewById(R.id.kongqi); kongqi_text.setText(date2_array[0].split(":")[1]); TextView zhiwai_text = (TextView) findViewById(R.id.zhiwai); zhiwai_text.setText(date2_array[1].split(":")[1]); // 设置小贴士数据 //
穿衣指数:较凉爽,建议着长袖衬衫加单裤等春秋过渡装。年老体弱者宜着针织长袖衬衫、马甲和长裤。感冒指数:虽然温度适宜但风力较大,仍较易发生感冒,体质较弱的朋友请注意适当防护。 //运动指数:阴天,较适宜开展各种户内外运动。洗车指数:较不宜洗车,路面少量积水,如果执意擦洗汽车,要做好溅上泥水的心理准备。晾晒指数:天气阴沉,不利于水分的迅速蒸发,不太适宜晾晒。若需要晾晒,请尽量选择通风的地点。 //旅游指数:阴天,风稍大,但温度适宜,总体来说还是好天气。这样的天气很适宜旅游,您可以尽情享受大自然的风光。路况指数:阴天,路面比较干燥,路况较好。舒适度指数:温度适宜,风力不大,您在这样的天气条件下,会感到比较清爽和舒适。 //空气污染指数:气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。紫外线指数:属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。
String[] xiaotieshi = detail.getProperty(6).toString().split("\n"); TextView xiaotieshi_text = (TextView) findViewById(R.id.xiaotieshi); xiaotieshi_text.setText(xiaotieshi[0]); // 设置当日图片 ImageView image = (ImageView) findViewById(R.id.imageView1); int icon = parseIcon(detail.getProperty(10).toString()); image.setImageResource(icon); // 取得第二天的天气情况 String[] date_str = detail.getProperty(12).toString().split(" "); TextView tomorrow_date = (TextView) findViewById(R.id.tomorrow_date); tomorrow_date.setText(date_str[0]); TextView tomorrow_qiweng = (TextView) findViewById(R.id.tomorrow_qiweng); tomorrow_qiweng.setText(detail.getProperty(13).toString()); TextView tomorrow_tianqi = (TextView) findViewById(R.id.tomorrow_tianqi); tomorrow_tianqi.setText(date_str[1]); ImageView tomorrow_image = (ImageView) findViewById(R.id.tomorrow_image); int icon1 = parseIcon(detail.getProperty(15).toString()); tomorrow_image.setImageResource(icon1); // 取得第三天的天气情况 String[] date_str1 = detail.getProperty(17).toString().split(" "); TextView afterday_date = (TextView) findViewById(R.id.afterday_date); afterday_date.setText(date_str1[0]); TextView afterday_qiweng = (TextView) findViewById(R.id.afterday_qiweng); afterday_qiweng.setText(detail.getProperty(18).toString()); TextView afterday_tianqi = (TextView) findViewById(R.id.afterday_tianqi); afterday_tianqi.setText(date_str1[1]); ImageView afterday_image = (ImageView) findViewById(R.id.afterday_image); int icon2 = parseIcon(detail.getProperty(20).toString()); afterday_image.setImageResource(icon2); // 取得第四天的天气情况 String[] date_str3 = detail.getProperty(22).toString().split(" "); TextView nextday_date = (TextView) findViewById(R.id.nextday_date); nextday_date.setText(date_str3[0]); TextView nextday_qiweng = (TextView) findViewById(R.id.nextday_qiweng); nextday_qiweng.setText(detail.getProperty(23).toString()); TextView nextday_tianqi = (TextView) findViewById(R.id.nextday_tianqi); nextday_tianqi.setText(date_str3[1]); ImageView nextday_image = (ImageView) findViewById(R.id.nextday_image); int icon3 = parseIcon(detail.getProperty(25).toString()); nextday_image.setImageResource(icon3); } catch (Exception e) { showTast(detail.getProperty(0).toString().split("。")[0]); }}

这里我只贴了代码的小部分,这里我提三点:(1)源码(2)资源图片来源,见源码(3)detail.getProperty(7)其中数字7的来源,参考下图。

 

第二种无限制的访问见下一篇。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的文章
php模式设计之 注册树模式
查看>>
【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
查看>>
_ENV和_G
查看>>
别做操之过急的”无效将军”,做实实在在的”日拱一卒” 纵使一年不将军,不可一日不拱卒...
查看>>
Oracle Grid Infrastructure: Understanding Split-Brain Node Eviction (文档 ID 1546004.1)
查看>>
Linux改变进程优先级的nice命令
查看>>
**16.app后端如何保证通讯安全--url签名
查看>>
win32窗口机制之CreateWindow
查看>>
C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
查看>>
awakeFromNib小总结
查看>>
java知识大全积累篇
查看>>
善于总结所做所学的内容
查看>>
Lua-简洁、轻量、可扩展的脚本语言
查看>>
org.hibernate.MappingException: entity class not found hbm可以解析,但是实体类不能解析...
查看>>
Android -- Drag&&Drop
查看>>
Extjs4:改变Grid单元格背景色(转载)
查看>>
中医无绝症[转载]
查看>>
ZendStudio10.6.1如何安装最新的集成svn小工具?
查看>>
PHP中$_SERVER的详细参数与说明
查看>>
jquery easyui datagrid mvc server端分页排序筛选的实现
查看>>