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("\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)源碼http://download.csdn.net/detail/feiyangxiaomi/6245231(2)資源圖片來源,見源碼(3)detail.getProperty(7)其中數字7的來源,參考下圖。
?
第二種無限制的訪問見下一篇。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的android天气查询(一)websevice之ksoap2软件包的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [置顶] mkdir函数-linux
- 下一篇: 431.chapter10. worki