2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  基于Android平臺的天氣預報系統(tǒng)的設計與開發(fā)</p><p>  摘要:安卓是谷歌于2008年推出的一個智能手機操作系統(tǒng),其獨特的設計模式使得開發(fā)手機軟件變得非常簡單。該論文介紹了一款安卓天氣預報的設計與實現(xiàn)過程。用戶可以通過主界面選擇城市來獲得包括風力、風向、紫外線強度等的天氣信息?;谑謾C的天氣預報系統(tǒng)能夠使用戶對于各地的天氣情況實時掌握,方便用戶的出行和行程安排,具有一定的實用性。

2、</p><p>  關鍵字:實時預報,Android,溫度檢測,定位</p><p>  The Design and Development of Weather Forecast System based on the Android System</p><p>  Abstract: Android is a Smartphone system launc

3、hed by Google in 2008, whose unique design pattern makes it easier to develop mobile phone softwares . The paper introduces the process of the design and implementation of a Android weather forecast system. Users can cho

4、ose a city what he likes from the home screen to get access to the weather information ,including wind,wind direction,strong of ultraviolet light and so on.Weather forecast system based on mobile phone enables users to t

5、ake the real-t</p><p>  Keywords: real-time forecast, Android , Temperature detection , location</p><p><b>  目錄</b></p><p><b>  1.緒論1</b></p><p&g

6、t;  1.1系統(tǒng)開發(fā)的目的1</p><p>  1.2系統(tǒng)開發(fā)工具1</p><p>  1.3 項目需求分析1</p><p><b>  2.項目設計2</b></p><p>  2.1 系統(tǒng)架構圖2</p><p>  2.2 webservice網(wǎng)絡拓撲圖2<

7、/p><p>  2.3 項目框架3</p><p>  3.Google Android平臺的相關理論3</p><p>  3.1 Google Android移動平臺下的應用研究3</p><p>  3.2 Android關鍵技術研究4</p><p>  4.天氣預報程序設計6</p>&

8、lt;p>  4.1 Android的UI界面的實現(xiàn)6</p><p>  4.2歡迎界面的實現(xiàn)7</p><p>  4.3 主界面功能實現(xiàn)8</p><p>  4.4數(shù)據(jù)存儲19</p><p><b>  5.系統(tǒng)測試20</b></p><p>  5.1測試目的20&

9、lt;/p><p>  5.3 測試內(nèi)容和結果20</p><p>  5.4 測試結果22</p><p><b>  6.結束語23</b></p><p><b>  致謝24</b></p><p>  參 考 文 獻24</p><p>

10、;<b>  1.緒論</b></p><p><b>  系統(tǒng)開發(fā)的目的</b></p><p>  由于智能手機的快速普及,智能操作系統(tǒng)在手機市場占據(jù)了很大一部分,其中以Andriod和iOS最為流行。為了讓智能手機用戶能夠隨時隨地查詢互聯(lián)網(wǎng)所提供的信息,一種非常高效的方法就是將網(wǎng)絡系統(tǒng)的功能擴展到智能手機終端上,讓手機能夠通過移動網(wǎng)絡訪問W

11、eb網(wǎng)站并處理各種各樣的業(yè)務。由于在大學學習過java語言,并且Andriod系統(tǒng)是基于java語言開發(fā)的,因此想開發(fā)一套基于Andriod平臺的3G手機氣象軟件,并從網(wǎng)上獲取天氣預報信息。Android平臺的天氣預報軟件的開發(fā)可以進一步擴大氣象信息的覆蓋面,讓廣大Android手機用戶能夠在第一時間獲取最新的天氣預報信息,以便提前預防,方便出行。同時,把氣象災害造成的損失降到最低,也可以提高公共服務質(zhì)量,更好的發(fā)揮氣象事業(yè)對經(jīng)濟社會發(fā)

12、展的現(xiàn)實性作用,有巨大的實用價值。雖然該技術在Android平臺已經(jīng)比較成熟,但是通過該軟件的開發(fā)仍然能幫助我更好的認識Android系統(tǒng)的工作原理。</p><p><b>  系統(tǒng)開發(fā)工具</b></p><p>  (1) win7系統(tǒng) jdk 1.8</p><p>  (2) Eclipse 標準版及ADT插件</p>

13、<p>  (3) SensorSimulator(用來模擬安卓手機中的溫度傳感器)</p><p>  1.3 項目需求分析</p><p>  (1) 系統(tǒng)能夠通過手機精確定位全國各個城市未來幾天的天氣情況</p><p>  (2) 系統(tǒng)具有安全性,獨立性,可靠性</p><p>  (3) 系統(tǒng)界面設計優(yōu)美,符合用戶的操作

14、習慣,且在一定程度上節(jié)省流量開銷</p><p><b>  2.項目設計</b></p><p><b>  2.1 系統(tǒng)架構圖</b></p><p>  圖2.1 系統(tǒng)構架圖</p><p>  2.2 webservice網(wǎng)絡拓撲圖</p><p>  本系統(tǒng)是基于提

15、供webservice服務的網(wǎng)站接收數(shù)據(jù),然后對數(shù)據(jù)進行解析,從中找到需要的數(shù)據(jù)。如圖2.2所示為提供webservice服務的網(wǎng)站網(wǎng)絡拓撲圖</p><p>  圖 2.2 網(wǎng)絡拓撲圖</p><p><b>  2.3 項目框架</b></p><p>  圖 2.3 工程目錄</p><p>  其中GPSActi

16、vity用來處理GPS定位信息,WeatherWebServiceActivity為天氣預報主界面類,WebServiceUtil用來處理從網(wǎng)站中接收的數(shù)據(jù),ConverUtil為處理經(jīng)緯度轉(zhuǎn)換的類,LoginActivity是處理登錄界面的類。</p><p>  3.Google Android平臺的相關理論</p><p>  3.1 Google Android移動平臺下的應用研究

17、</p><p>  Android系統(tǒng)提供給應用程序開發(fā)者的只是一個框架,在該平臺下開發(fā)應用程序必須要遵守這個框架原則。我們開發(fā)的應用程序其實就是在這個框架上進行拓展,下面介紹一下android這個框架所提供的功能。</p><p>  Android.app:提供最上層的程序模型和運行環(huán)境</p><p>  Android.content:包含對設備上的數(shù)據(jù)進

18、行訪問和發(fā)布的類</p><p>  Android.database:Android系統(tǒng)內(nèi)置一個輕量級的SQLite數(shù)據(jù)庫</p><p>  Android.graphics:底層的圖形庫,包含顏色過濾,畫布,矩形,點,可以用來將它們直接繪制到屏幕上。</p><p>  Android.net: 提供用來幫助訪問網(wǎng)絡的類。</p><p&g

19、t;  Android.location:定位以及與定位有關的一些類。</p><p>  Android.util:涉及到一些實用性的方法,例如對時間和日期進行操作。</p><p>  Android.media: 提供一些管理多種視頻,音頻的媒體接口。</p><p>  Android.os:提供了系統(tǒng)服務,IPC機制和消息傳輸。</p>&l

20、t;p>  Android.opngl:提供了OpenGL的工具。</p><p>  Android.provider:提供了訪問Android中的內(nèi)容提供者的類。</p><p>  Android.telephony:提供用來與撥打電話相關的API交互的類。</p><p>  Android.view: 提供最基本的用戶界面接口框架。</p>

21、;<p>  Addroid.webkit:提供用來調(diào)用默認瀏覽器的接口。</p><p>  Android.widget包含各種UI元素,可以在應用程序的布局中使用。</p><p>  3.2 Android關鍵技術研究</p><p>  Android平臺是基于java語言開發(fā)的,其中主要由四大組建構成,分別為:Activity、Servic

22、e、Broadcast Receiver、Content Provider。</p><p>  1.Activity Activity就是一個用戶界面,每一個Activity就是一個獨立的界面。比如照相機程序,實現(xiàn)一個拍照的Activity,短信也是一個Activity,撥號界面也是一個Activity等等,這些Activity都是相互獨立的,但組合在一起它們就變成一個完整功能的應用程序了。我們可以把Act

23、ivity理解成java中的JFrame控件,不過它與JFrame的區(qū)別在于:java中的JFrame本身可以設置布局管理器,不斷的向JFrame中添加組件,但Activity只能通過setContentView(layout)方法在主界面顯示布局。 </p><p>  2.Service Service與Activity的地位是相同的,它也代表一個獨立的Android組件,Service與Activit

24、y的區(qū)別在于:Service通常在后臺運行,它不需要與用戶進行交互,因此Service沒有用戶界面。與Activity需要繼承Activity的基類一樣,Service同樣也需要繼承Service基類。當一個Service組件在后臺運行起來后,它就會和Acitivity同樣也有自己的生命周期。Service組件通常用于為一些不需要界面但是又必須在后臺運行的程序提供服務,比如音樂或者音頻播放軟件。</p><p>

25、  3. Broadcast Receiver 中文意思是廣播接收者,顧名思義它主要就是用來接收來自廣播和系統(tǒng)中的應用程序發(fā)送的消息。在Android中廣播的用處非常廣泛,例如當開機后會自動產(chǎn)生一條廣播,接收到這條廣播后系統(tǒng)就能及時的做出提示和保存數(shù)據(jù)等操作;當電池電量低的時候系統(tǒng)也會產(chǎn)生一條廣播,這樣就能及時提示用戶進行充電等的操作。本質(zhì)上Broadcast Receiver就是一種全局的監(jiān)聽器,我們用它來監(jiān)聽系統(tǒng)向應用程序發(fā)送的廣

26、播消息?;谝陨纤鑫覀兛梢杂盟浅7奖愕膶崿F(xiàn)系統(tǒng)中不同組件之間的相互通信。 </p><p>  4.Content Provider 它是不同APP之間進行交換數(shù)據(jù)的核心的API , Content Provider在系統(tǒng)中以某種URI的形式對外提供數(shù)據(jù),允許其他應用查詢或者修改數(shù)據(jù);其他應用程序使用Content Resolver根據(jù)URI去訪問和操作指定的數(shù)據(jù)。事實上這里有一個簡單的類比:可以把

27、Content Provider看作安卓系統(tǒng)內(nèi)部提供的一個網(wǎng)站,這個網(wǎng)站以固定的URI對外提供服務;而Content Resolver可以當成系統(tǒng)內(nèi)部的HttpClient,它可以向指定的URI發(fā)送請求,這種請求最后委托給Content Provider處理,從而實現(xiàn)對網(wǎng)站內(nèi)部數(shù)據(jù)進行操作。</p><p><b>  3.3 小結</b></p><p>  本單元

28、主要概括了關于Android平臺的三個方面的內(nèi)容:1.Google android移動平臺的概述2.google android移動平臺開發(fā)過程的研究3.Google android移動平臺下的應用研究,概要的介紹了Google android移動平臺相關知識,4.介紹了Android平臺下的四大組件的相關內(nèi)容。通過本章我們對Google android移動平臺有初步的認識和了解,為后面的開發(fā)做了堅實的基礎。</p>&l

29、t;p>  4.天氣預報程序設計</p><p>  4.1 Android的UI界面的實現(xiàn)</p><p>  在Android中用戶界面都是布局在XML文件中的。這些XML文件放在工程/res/layout下面。這對以前熟悉java可視化編程的人來說可能有些不太習慣。可能有人疑問為什么要把布局文件放在XML文件里呢?其實有過web基礎的都應該知道m(xù)vc框架,這是一種用于網(wǎng)站開發(fā)的

30、非常優(yōu)秀的思想,在安卓系統(tǒng)中,安卓開發(fā)人員把用戶界面放在XML文檔中定義,這樣就可以讓XML文檔專門負責用戶UI界面設置,而java程序?qū)iT負責業(yè)務實現(xiàn),從而降低程序的耦合,便于程序的維護和擴展,符合mvc設計思想。</p><p>  在XML中Android開發(fā)人員放置了很多我們經(jīng)常用到的一些組件,比如view,Button,EditText等,通過這些系統(tǒng)提供的控件,我們可以開發(fā)出我們想要的程序界面來。&l

31、t;/p><p>  Layout 是一類特殊的ViewGroup 控件,它們本身并不顯示任何的內(nèi)容,存在的惟一原因就是其中的內(nèi)部結構,能夠更好地擺放它的子控件。比如Linearlayout(線性布局),可將子控件按水平或垂直方向按順序排列下去;Tablelayout(表格布局),可以將子控件按照表格的形式,一枚枚放置好;Relativelayout(相對布局),實際應用中這個布局更靈活,它可以設定各個控件之間的對齊

32、和排列關系,適合編寫復雜的界面。有了Layout 的存在,控件和控件之間不再是獨立地存在,而是更有機地結合在一起,設定起來也更為方便。</p><p>  在本程序中布局文件我一共用到了如圖4.1所示的布局文件</p><p>  圖 4.1 布局文件圖</p><p>  其中city_detail用來顯示城市簡介的信息,city_environment用來顯示當

33、前所在城市的生活指數(shù)信息,city_layout用來顯示用來選擇城市布局,content_layout用來顯示天氣情況,gps_view用來顯示gps定位信息,login用來顯示登錄歡迎界面,main包含了用來切換的三個界面,tqyb顯示主界面布局</p><p>  4.2歡迎界面的實現(xiàn) </p><p>  考慮到程序界面的美觀效果,在進入主界面之前我首先設置了一個用來跳轉(zhuǎn)的Acti

34、vity,并命名為LoginActivity。在LoginActivity中顯示login布局</p><p>  Timer timer = new Timer();</p><p>  final Intent intent = new Intent(this,edu.njue.app.WeatherWebServiceActivity.class);</p><

35、p>  TimerTask task = new TimerTask(){</p><p><b>  @Override</b></p><p>  public void run() {</p><p>  startActivity(intent);</p><p>  LoginActivity.this.

36、finish();</p><p><b>  }</b></p><p><b>  };</b></p><p>  timer.schedule(task, 1000);</p><p><b>  }</b></p><p>  程序顯

37、示畫面一秒后會進入主程序天氣界面,如圖4.2所示程序歡迎界面</p><p>  圖 4.2 歡迎界面圖</p><p>  3.3 主界面功能實現(xiàn)</p><p>  安裝好程序后進入程序主界面時,系統(tǒng)會顯示會的窗口。在這里我把默認城市設置為南京,如果用戶不單擊城市選擇按鈕的時候,則會顯示的是南京近兩天的天氣情況。如圖4.3所示。第一次運行時,我是通過在手機文件系

38、統(tǒng)中判斷是否存在一個名為shared_prefs的文件來判斷是否為第一次運行,如果存在則不是第一次運行,系統(tǒng)會繼續(xù)執(zhí)行向下執(zhí)行代碼,如果系統(tǒng)中不存在該文件,則為第一次運行該程序,程序彈出對話框告訴用戶。</p><p>  圖 4.3 第一次運行效果圖</p><p>  在主程序界面,我運用的主要是ViewFlipper組件,通過該組件可以實現(xiàn)滑動顯示界面,不過在設置滑動界面之前我們要先

39、設定滑動的動畫。該動畫實在res\anim中設置,如圖4.4所示為左右滑動效果布局</p><p>  圖 4.4 界面滑動布局</p><p>  其中l(wèi)eft_in中的代碼為:</p><p>  <set xmlns:android="http://schemas.android.com/apk/res/android">

40、</p><p>  <translate android:fromXDelta="100%p" android:toXDelta="0" </p><p>  android:duration="500" /> </p><p>  <alpha android:fromAlpha

41、="0.1" android:toAlpha="1.0" </p><p>  android:duration="500" /> </p><p><b>  </set></b></p><p>  其他四個與此基本相似,在此不再列出。&l

42、t;/p><p>  當我們定義了滑動效果之后還要在main.xml中把想要滑動的布局包含進去。</p><p>  <ViewFlipper android:id="@+id/viewFlipper"</p><p>  android:layout_width="match_parent"</p><

43、p>  android:layout_height="match_parent"></p><p>  <include layout="@layout/tqyb"/></p><p><b>  <include </b></p><p>  android:id=&quo

44、t;@+id/city_envrionment"</p><p>  layout="@layout/city_environment"/></p><p>  <include android:id="@+id/city_detail"</p><p>  layout="@layout/ci

45、ty_detail"/></p><p>  </ViewFlipper>"</p><p>  有了這個布局之后我們就可以在主程序界面調(diào)用界面進行切換了。主程序?qū)崿F(xiàn)觸屏監(jiān)聽接口,監(jiān)聽觸摸時的x,y坐標,以及當手指離開時的坐標,如果兩者之間的距離大于或小于100像素,則認為想要實現(xiàn)滑動。</p><p>  public boo

46、lean onTouch(View v, MotionEvent event) {</p><p>  if(event.getAction()==MotionEvent.ACTION_DOWN){</p><p>  touchDownX = event.getX();</p><p>  return true;</p><p>  }e

47、lse if(event.getAction()==MotionEvent.ACTION_UP){</p><p>  touchUpX = event.getX();</p><p>  if(touchUpX-touchDownX>100){//從左往右滑動</p><p>  viewFlipper.setAnimation(AnimationUtils

48、.loadAnimation(this,android.R.anim.slide_in_left));</p><p>  viewFlipper.setAnimation(AnimationUtils.loadAnimation(this,android.R.anim.slide_out_right));</p><p>  viewFlipper.showPrevious();<

49、/p><p>  }else if(touchDownX-touchUpX>100){</p><p>  viewFlipper.setAnimation(AnimationUtils.loadAnimation(this, R.anim.right_in));</p><p>  viewFlipper.setAnimation(AnimationUtils.

50、loadAnimation(this,R.anim.left_out));</p><p>  viewFlipper.showNext();</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><

51、p>  return false;</p><p><b>  }</b></p><p><b>  獲取天氣信息并顯示</b></p><p>  天氣預報系統(tǒng)最重要的當然是如何才能有效的獲取天氣信息了,要想獲取實時的天氣信息,我們就要訪問專門提供天氣信息的網(wǎng)站把網(wǎng)站返回的信息解析出想要的信息并顯示在手機上。通過

52、網(wǎng)上的搜索,我找到了一個提供webservice的網(wǎng)站:http://www.webxml.com.cn/webservices/weatherwebservice.asmx 通過向這個網(wǎng)站提供參數(shù)就可以獲取指定城市的天氣信息了,該網(wǎng)站是從中央氣象臺接收的信息,數(shù)據(jù)準確可靠。每隔兩個小時更新一次天氣情況,具有很好的實時性。</p><p>  Webservice的出現(xiàn)成功的解決了不同平臺和語言之間進行數(shù)據(jù)交換的

53、問題,它主要使用XML文檔來傳遞消息,并將該消息發(fā)送給任何請求對象,由于不同系統(tǒng)對XML的完美支持,因此從根本上完善了跨平臺服務,任何時刻、任何平臺我們可以使用任何語言來訪問該Webservice服務。對于Webservice使用者而言,webservice API與任何操作平臺無關,它只是以XML語言作為數(shù)據(jù)交換格式。</p><p>  Webservice平臺主要涉及到的技術是SOAP(Simple Obj

54、ect Access Protocol),WSDL(Web Service Description Language)</p><p>  SOAP依賴于XML文檔來構建,一條SOAP消息就是一份特定的XML文檔,SOAP主要包含三個方面的主要元素:</p><p>  <Envelope…/>根元素,該元素是必填的。其中SOAP消息用來傳遞的數(shù)據(jù)的XML文檔以該元素作為根元素

55、</p><p>  <Header…/>元素,該元素是選填的。它包含了SOAP消息的頭信息</p><p>  <Body…/>元素,該元素是必填的。它包含所有的調(diào)用和相應的內(nèi)容</p><p>  Java本身提供了很豐富的Web Service支持,比如Sun公司制定的JAX-WS 2規(guī)范,Apache開源組織提供的Axis1,Axis

56、2,CXF等。我們可以使用Google公司為Android平臺開發(fā)的專門處理Webservice信息的ksoap2-android進行客戶端的開發(fā)。使用該第三方包的方法為:</p><p>  1.創(chuàng)建HttpTrasportSE對象</p><p>  2.創(chuàng)建SoapSerializationEnvelope對象</p><p>  3.創(chuàng)建SoapObject

57、對象,創(chuàng)建該對象時需要傳入所要調(diào)用Web Service的命名空間</p><p>  4.如果有參數(shù)需要傳給WebService服務器端,調(diào)用SoapObject對象的addProperty(String name,Object value)方法來設置參數(shù),該方法的name參數(shù)指定參數(shù)名,value指定參數(shù)值</p><p>  5.調(diào)用SoapSerializationEnvelope

58、的setOutputSoapObject()方法,或者直接對bodyout屬性賦值,將前兩步創(chuàng)建的SoapObject對象設 SoapSerializationEnvelope的傳出SOAP消息體</p><p>  6.調(diào)用對象的call()方法,并以SoapSerializationEnvelope作為參數(shù)調(diào)用遠程的WebService</p><p>  7.調(diào)用完成后,訪問Soap

59、SerializationEnvelope對象的bodyin屬性,該屬性返回一個SoapObject對象,該對象就代表了Web Service的返回消息,解析該SoapObject對象,即可獲取調(diào)用Web Service的返回值。</p><p>  基于此編寫調(diào)用webservice服務的類WebServiceUtil</p><p><b>  返回城市列表</b>

60、;</p><p>  public static List<String> getProvinceList()</p><p><b>  {</b></p><p>  // 需要調(diào)用的方法名(獲得本天氣預報Web Services支持的洲、國內(nèi)外省份和城市信息)</p><p>  //String m

61、ethodName = "getRegionProvince";</p><p>  String methodName = "getSupportProvince";</p><p>  // 創(chuàng)建HttpTransportSE傳輸對象</p><p>  HttpTransportSE httpTranstation =

62、new HttpTransportSE(SERVICE_URL);</p><p>  httpTranstation.debug = true;</p><p>  // 使用SOAP1.1協(xié)議創(chuàng)建Envelop對象</p><p>  SoapSerializationEnvelope envelope = new SoapSerializationEnvelo

63、pe(</p><p>  SoapEnvelope.VER11);</p><p>  // 實例化SoapObject對象</p><p>  SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);</p><p>  envelope.bodyOut = soapO

64、bject;</p><p>  // 設置與.Net提供的Web Service保持較好的兼容性</p><p>  envelope.dotNet = true;</p><p><b>  try</b></p><p><b>  {</b></p><p>  //

65、 調(diào)用Web Service</p><p>  httpTranstation.call(SERVICE_NS + methodName, envelope);</p><p>  if (envelope.getResponse() != null)</p><p><b>  {</b></p><p>  //

66、獲取服務器響應返回的SOAP消息</p><p>  SoapObject result = (SoapObject) envelope.bodyIn;</p><p>  SoapObject detail = (SoapObject) result.getProperty(methodName</p><p>  + "Result");&l

67、t;/p><p>  // 解析服務器響應的SOAP消息。</p><p>  return parseProvinceOrCity(detail);</p><p><b>  }</b></p><p>  } catch (Exception e)</p><p><b>  {<

68、;/b></p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return null;</p><p><b>  }</b></p><p>  解析出省份和城市,把返回的數(shù)據(jù)用split方法切割,

69、只取需要的省份數(shù)據(jù)</p><p>  private static List<String> parseProvinceOrCity(SoapObject detail)</p><p><b>  {</b></p><p>  ArrayList<String> result = new ArrayList<

70、String>();</p><p>  for (int i = 0; i < detail.getPropertyCount(); i++)</p><p><b>  {</b></p><p>  String str = detail.getProperty(i).toString();</p><p&

71、gt;  // 解析出每個省份</p><p>  result.add(str.split(" ")[0]);</p><p><b>  }</b></p><p>  return result;</p><p><b>  }</b></p><p&g

72、t;  通過具體的城市獲取天氣信息</p><p>  public static SoapObject getWeatherByCity(String cityName)</p><p><b>  {</b></p><p>  // 根據(jù)城市或地區(qū)名稱查詢獲得未來三天內(nèi)天氣情況、現(xiàn)在的天氣實況、天氣和生活指數(shù)</p><

73、;p>  //String methodName = "getWeather";</p><p>  String methodName = "getWeatherbyCityName";</p><p>  HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);&

74、lt;/p><p>  httpTranstation.debug = true;</p><p>  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);</p><p>  SoapObject soapObject = new SoapObje

75、ct(SERVICE_NS, methodName);</p><p>  //soapObject.addProperty("theCityCode", cityName);</p><p>  soapObject.addProperty("theCityName",cityName);</p><p>  envelop

76、e.bodyOut = soapObject;</p><p>  envelope.dotNet = true;</p><p><b>  try</b></p><p><b>  {</b></p><p>  // 調(diào)用Web Service</p><p>  h

77、ttpTranstation.call(SERVICE_NS + methodName, envelope);</p><p>  if (envelope.getResponse() != null)</p><p><b>  {</b></p><p>  // 獲取服務器響應返回的SOAP消息</p><p> 

78、 SoapObject result = (SoapObject) envelope.bodyIn;</p><p>  SoapObject detail = (SoapObject) result.getProperty(methodName+ "Result");</p><p>  // 解析服務器響應的SOAP消息。</p><p> 

79、 return detail;</p><p><b>  }</b></p><p>  } catch (Exception e)</p><p><b>  {</b></p><p>  e.printStackTrace();</p><p><b> 

80、 }</b></p><p>  return null;</p><p><b>  }</b></p><p>  如圖4.5所示為調(diào)用此方法后返回的為XML文檔</p><p>  圖 4.5 網(wǎng)站返回XML文檔</p><p>  接下來我們只需要對該文件解析就可以拿出我們需要

81、的數(shù)據(jù)了。然后把對應的數(shù)據(jù)添加在相應的地方即可。</p><p><b>  城市列表的選擇:</b></p><p>  當我們單擊城市選擇按鈕的時候會跳出圖4.6的城市選擇界面</p><p>  圖4.6 城市選擇界面</p><p><b>  對應的方法為</b></p>&

82、lt;p>  public void show_dialog(int cityId)</p><p><b>  {</b></p><p>  city_text = (TextView)findViewById(R.id.city_text);</p><p>  switch (cityId)</p><p>

83、;<b>  {</b></p><p>  case CITY:</p><p>  // 取得city_layout.xml中的視圖</p><p>  final View view = LayoutInflater.from(this).inflate(</p><p>  R.layout.city_layou

84、t, null);</p><p>  // 省份Spinner</p><p>  province_spinner = (Spinner) view.findViewById(R.id.province_spinner);</p><p>  // 城市Spinner</p><p>  city_spinner = (Spinner)

85、view.findViewById(R.id.city_spinner);</p><p>  provinces = WebServiceUtil.getProvinceList();</p><p>  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.si

86、mple_spinner_item, provinces);</p><p>  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);</p><p>  province_spinner.setAdapter(adapter);</p><p>  // 省份

87、Spinner監(jiān)聽器</p><p>  province_spinner.setOnItemSelectedListener(new OnItemSelectedListener()</p><p><b>  {</b></p><p><b>  @Override</b></p><p> 

88、 public void onItemSelected(AdapterView<?> view,</p><p>  View parent, int position, long id)</p><p><b>  {</b></p><p>  citys = WebServiceUtil.getCityListByProvin

89、ce(provinces.get(position));</p><p>  ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(WeatherWebServiceActivity.this,</p><p>  android.R.layout.simple_spinner_item, citys);&

90、lt;/p><p>  adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);</p><p>  city_spinner.setAdapter(adapter1);</p><p><b>  }</b></p><p&

91、gt;<b>  @Override</b></p><p>  public void onNothingSelected(AdapterView<?> arg0)</p><p><b>  {</b></p><p><b>  }</b></p><p>&

92、lt;b>  });</b></p><p>  // 城市Spinner監(jiān)聽器</p><p>  city_spinner.setOnItemSelectedListener(new OnItemSelectedListener()</p><p><b>  {</b></p><p><b

93、>  @Override</b></p><p>  public void onItemSelected(AdapterView<?> arg0, View arg1,</p><p>  int position, long arg3)</p><p><b>  {</b></p><p&

94、gt;  city_str = citys.get(position);</p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public void onNothingSelected(AdapterView<?> arg0)</p>

95、<p><b>  {</b></p><p><b>  }</b></p><p><b>  });</b></p><p>  // 選擇城市對話框</p><p>  AlertDialog.Builder dialog = new AlertDial

96、og.Builder(this);</p><p>  dialog.setTitle("請選擇所屬城市");</p><p>  dialog.setView(view);</p><p>  dialog.setPositiveButton("確定",new DialogInterface.OnClickListener(

97、)</p><p><b>  {</b></p><p><b>  @Override</b></p><p>  public void onClick(DialogInterface dialog, int which)</p><p><b>  {</b></

98、p><p>  city_text.setText(city_str);</p><p>  writeSharedPreference(city_str);</p><p>  refresh(city_str);</p><p>  checkWeather(city_str);</p><p><b>  

99、}</b></p><p><b>  });</b></p><p>  dialog.setNegativeButton("取消",new DialogInterface.OnClickListener()</p><p><b>  {</b></p><p>

100、<b>  @Override</b></p><p>  public void onClick(DialogInterface dialog, int which)</p><p><b>  {</b></p><p>  dialog.dismiss();</p><p><b>

101、  }</b></p><p><b>  });</b></p><p>  dialog.show();</p><p><b>  break;</b></p><p><b>  default:</b></p><p><b&

102、gt;  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  編寫gps定位轉(zhuǎn)換類用于定位當前位置信息ConverUtil。由于Google SDK內(nèi)部的一個小bug,我們不能直接利用手機內(nèi)部來定位地址,必須要把當前的經(jīng)緯度信息發(fā)送給谷歌網(wǎng)站

103、來解析。</p><p>  public static String getAddress(double longitude,double latitude){</p><p><b>  //</b></p><p>  HttpClient client = new DefaultHttpClient();</p><

104、p>  //Get方法得到內(nèi)容</p><p>  HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/"</p><p>  + "geocode/json?latlng="</p><p>  + latitude + ","

105、; + longitude </p><p>  + "&sensor=false&region=cn");</p><p>  StringBuilder sb = new StringBuilder();</p><p><b>  try{</b></p><p>  HttpR

106、esponse response = client.execute(httpGet);</p><p>  HttpEntity entity = response.getEntity();</p><p>  //獲取服務器響應的字符串</p><p>  InputStream is = entity.getContent();</p><p

107、><b>  int b;</b></p><p>  while((b = is.read())!=-1){</p><p>  sb.append((char)b);</p><p><b>  }</b></p><p>  //把服務器相應的字符串轉(zhuǎn)化為JSon對象</p>

108、<p>  JSONObject jsonObj = new JSONObject(sb.toString());</p><p>  //解析出相應結果中的地址信息</p><p>  String s1 = jsonObj.getJSONArray("results").getJSONObject(0).getString("formatte

109、d_address");</p><p>  String s2 = s1.split(",")[3];</p><p>  Log.i("start", s2);</p><p>  return jsonObj.getJSONArray("results").getJSONObject(0).

110、getString("formatted_address");</p><p>  }catch(Exception e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return null;</p><

111、;p><b>  }</b></p><p>  本軟件同樣實現(xiàn)了傳感器接口,可以實時監(jiān)測當前外部溫度,增加用戶的友好體驗,主要方法為:</p><p>  public void onSensorChanged(SensorEvent event) {</p><p>  // TODO Auto-generated method st

112、ub</p><p>  float[] values = event.values;</p><p>  //真機上獲取觸發(fā)event的傳感器類型</p><p>  //int sensorType = event.sensor.getType();</p><p>  //模擬器上獲取觸發(fā)event的傳感器類型</p>&

113、lt;p>  int sensorType = event.type;</p><p>  StringBuilder sb = null;</p><p>  switch(sensorType){</p><p>  case Sensor.TYPE_TEMPERATURE:</p><p>  sb = new StringBui

114、lder();</p><p>  sb.append(values[0]);</p><p>  sb.append("℃");</p><p>  et.setText(sb.toString());</p><p><b>  break;</b></p><p>  d

115、efault:break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  4.4數(shù)據(jù)存儲</b></p><p>  有時候應用程序需要有數(shù)據(jù)保存,而且這些數(shù)據(jù)都比較簡單,基本上只是一些簡單的字符串,標量類型的值等。

116、對于這種數(shù)據(jù),Android提供了SharedPreferences進行保存。SharedPreferences主要保存的是一些簡單的key-value對。在本程序中,我首先設置了一個判斷網(wǎng)絡狀態(tài)連通情況的方法,返回一個Boolean類型的值,如果網(wǎng)絡正常連接,則會從網(wǎng)絡刷新天氣,如果當前網(wǎng)絡狀態(tài)不好,則會從本地保存的XML文件中讀取緩存的天氣,方便用戶進行查看。</p><p>  判斷網(wǎng)絡狀態(tài)的方法:<

117、/p><p>  //判斷網(wǎng)絡類型是否為3G網(wǎng)絡</p><p>  public boolean isNetwork(){</p><p>  ConnectivityManager connectivityManager = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVI

118、CE);</p><p>  NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();</p><p>  if(networkInfo!=null){</p><p>  return networkInfo.isAvailable();</p><p>&l

119、t;b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p>  //判斷是否為WIFI連接</p><p>  public boolean isWIFINetwork(){</p><p>  Connect

120、ivityManager connectivityManager = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);</p><p>  if(connectivityManager == null){</p><p>  return false;</p><p>

121、<b>  }else{</b></p><p>  NetworkInfo[] info = connectivityManager.getAllNetworkInfo();</p><p>  if(info!=null){</p><p>  for(int i=0;i<info.length;i++){</p>&l

122、t;p>  if(info[i].getTypeName().equals("WIFI")&&info[i].isConnected()){</p><p>  return true;</p><p><b>  }</b></p><p><b>  }</b></p&g

123、t;<p><b>  }</b></p><p><b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p>  在oncreate方法中,首先判斷當前連接情況if(isNetWork()||i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論