zoukankan      html  css  js  c++  java
  • android天气查询(一)websevice之ksoap2软件包的使用

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

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

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

    第三:数据JSON怎么解析。

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

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

    1.数据信息源                                               

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

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

    第一种,webService来获取国家气象局提供的天气服务:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx

      我们可以点击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
    	{
    		// 取得<string>10月13日 中雨转小雨</string>中的数据
    		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]);
    
    		// 取得<string>江苏 无锡</string>中的数据
    		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]);
    
    		// 取得<string>15℃/21℃</string>中的数据
    		TextView qiweng_text = (TextView) findViewById(R.id.qiweng);
    		qiweng_text.setText(detail.getProperty(8).toString());
    
    		// 取得<string>今日天气实况:气温:20℃;风向/风力:东南风
    		// 2级;湿度:79%</string>中的数据,并通过":"拆分成数组
    		TextView shidu_text = (TextView) findViewById(R.id.shidu);
    		String date1 = detail.getProperty(4).toString();
    		shidu_text.setText(date1.split(":")[4]);
    
    		// 取得<string>东北风3-4级</string>中的数据
    		TextView fengli_text = (TextView) findViewById(R.id.fengli);
    		fengli_text.setText(detail.getProperty(9).toString());
    
    		// 取得<string>空气质量:良;紫外线强度:最弱</string>中的数据,并通过";"拆分,再通过":"拆分,拆分两次,取得我们需要的数据
    		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]);
    
    		// 设置小贴士数据
    		// <string>穿衣指数:较凉爽,建议着长袖衬衫加单裤等春秋过渡装。年老体弱者宜着针织长袖衬衫、马甲和长裤。感冒指数:虽然温度适宜但风力较大,仍较易发生感冒,体质较弱的朋友请注意适当防护。
    		//运动指数:阴天,较适宜开展各种户内外运动。洗车指数:较不宜洗车,路面少量积水,如果执意擦洗汽车,要做好溅上泥水的心理准备。晾晒指数:天气阴沉,不利于水分的迅速蒸发,不太适宜晾晒。若需要晾晒,请尽量选择通风的地点。
    		//旅游指数:阴天,风稍大,但温度适宜,总体来说还是好天气。这样的天气很适宜旅游,您可以尽情享受大自然的风光。路况指数:阴天,路面比较干燥,路况较好。舒适度指数:温度适宜,风力不大,您在这样的天气条件下,会感到比较清爽和舒适。
    		//空气污染指数:气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。紫外线指数:属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。</string>
    		String[] xiaotieshi = detail.getProperty(6).toString().split("
    ");
    		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)源码http://download.csdn.net/detail/feiyangxiaomi/6245231(2)资源图片来源,见源码(3)detail.getProperty(7)其中数字7的来源,参考下图。

     

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

  • 相关阅读:
    September 29th 2017 Week 39th Friday
    September 28th 2017 Week 39th Thursday
    September 27th 2017 Week 39th Wednesday
    September 26th 2017 Week 39th Tuesday
    September 25th 2017 Week 39th Monday
    September 24th 2017 Week 39th Sunday
    angular2 学习笔记 ( Form 表单 )
    angular2 学习笔记 ( Component 组件)
    angular2 学习笔记 ( Http 请求)
    angular2 学习笔记 ( Router 路由 )
  • 原文地址:https://www.cnblogs.com/james1207/p/3320100.html
Copyright © 2011-2022 走看看