Android實踐項目匯報(總結)


天氣客戶端開發報告

 

1    系統需求分析

1.1功能性需求分析

    天氣預報客戶端,最基本就是為用戶提供准確的天氣預報信息。天氣查詢結果有兩種:一種是當天天氣信息,信息結果比較詳細,除溫度、天氣狀況外還可以提示穿衣建議、濕度、風向等信息,這樣使天氣信息更加完善;一種是未來幾天天氣預報信息,提供未來幾天的天氣狀況,方便用戶的出行預判。

1.2性能需求分析

  為了保證客戶端能夠長期、安全、穩定、可靠、高效的運行,天氣客戶端應該滿足以下的性能需求: 

  1)系統處理的准確性和及時性 

  2)系統的開放性和系統的可擴充性

  3)系統的易用性和易維護性 

  4)系統的資源低消耗性

 

2    系統設計

2.1界面架構

  結合用戶查詢習慣,在主界面我們可以提供兩種查詢方法:

  1.輸入查詢:
    在城市輸入欄中輸入所需查詢城市的名字,點擊查詢按鈕即可顯示出天氣信息。

  2.選擇查詢:
    針對常見大中型城市,如北京、上海等,為方便用戶查詢,只要在預設城市的下拉欄中尋找用戶所查找城市,點擊查詢按鈕即可顯示出天氣信息。

  用Axure RP 畫出的界面設計圖如下:

                                                     

2.2系統模塊

整個系統由四個模塊組成

           系統模塊

          模塊功能

           ConstData

         存放預設城市

             Weather

       設置當天和未來幾天天氣類

             chacun

         解析並獲得天氣信息

          MainActivity

         天氣查詢主界面

 

 

 

3      系統實現

3.1 UI界面實現

3.1.1主界面實現

  Android用戶布局都是在布局在XML文件中,這些XML文件放在工程/res/layout下。在安卓系統中,開發人員把用戶界面放在在XML文檔中定義,可以使XML文檔專門負責用戶UI界面設計,而java程序負責功能實現,從而降低程序耦合,便於程序的維護與擴展。

  多數的界面控件都在android.view和android.widget包中,android.view.View為他們的父類。

  在activity.main主界面XML文件中,定義了TextView、Button、ExitText、這三種基本控件,它們分別表示文字顯示、按鈕切換、文本輸入TextView用來顯示軟件性質,Button用來控制“查詢”鍵,ExitText用來輸入所查詢城市名字。

  主界面XML文件還定義了ListView、Spinner這兩個需要適配器的布局文件和LinearLayout、RelativeLayout布局文件。ListView、Spinner分別用來顯示天氣查詢結果列表、下拉欄里的城市,LinearLayout、RelativeLayout分別表示線性布局和相對布局,控制整個主界面的布局。

                                                   

 3.1.2天氣內容界面實現

  在list_item.XML文件中通過LinearLayout布局文件的設置將天氣結果以下表的格式顯示出來

date

week

weather

tempt

wind

dressing_advice

 

 

3.2 設置天氣類Weather

  設置一個天氣類Weather,以便查詢和顯示天氣。

3.2.1定義私有變量

  使用private定義私用成員city、date、week、weather、temperature、wind、dressing_advice,使用戶不能私自提取天氣數據,只能按照自己構造的方法提取出來。

3.2.2構造函數

   通過重載構造函數Weather創建有參和無參兩種對象方式,增強系統使用彈性。既能運用反射機制生成對象,用能為繼承使調用Weather類構造函數方便。

 3.2.3提供取值方法

  運用反射機制getClass和setClass的方法,提供獲得天氣具體數據的方法。

 

3.3天氣查詢功能實現

3.3.1解析天氣信息

  天氣預報系統最重要的就是獲取天氣信息,為獲得實時天氣信息,我們就要訪問專門天氣信息的網站把返回的信息解析出來。系統采HttpURLConnection的訪問方式來和Web 客戶機取得聯系,並以字節數組的方式返回。其中urlPath由三部分組成:

信息源網址

cityname

key

  其中信息源網址由haoservice服務平台提供提供,cityname為所查詢城市的名字,key表示用戶標識。

  我通過http://apis.haoservice.com/weather這個網站提供的參數來獲取指定城市的天氣信息。它主要使用JSON(JavaScript Object Notation)數據交換格式,可以在在異步應用程序中將字符串從 Web 客戶機傳遞給服務器端,有對象object和數組array這兩種數據結構。對象是一個無序的“‘名稱/值’對”集合,數組是值(value)的有序集合。

3.3.2獲得天氣信息

  將解析后的JSON格式天氣數據分別賦值給定義的todayWeather類和we類,它們是實例化的天氣類Weather,分別表示當天天氣信息和未來天氣信息,最后添加到數組列表weathers中。這樣就能獲得天氣信息。

                                              

 

 

 3.4主程序實現

3.4.1設置Activity界面

  通過setContentView(R.layout.activity_main)將主程序MainActivity采用activity_main布局。利用findViewById函數將主程序按鈕與布局文件一一對應,其中下拉欄Spinner與顯示列表Listview綁定對應的適配器。對應列表如下:

主程序MainActivity

activity_main界面

currentCityTv

currentCity

city_Et

cityEt

city_spr

citySpinner

mListView

mListView

 

3.4.2顯示天氣

  為天氣結果顯示列表ListView綁定一個適配器myAdapter,通過myAdapter.notifyDataSetChanged通知MainActivity更新顯示ListView。配器myAdapter類圖如下:

                                              

 

   適配器myAdapter繼承 BaseAdapter類,ListView在開始繪制的時候,系統首先調用getCount()函數,根據他的返回值得到 listView的長度,然后根據這個長度,調用getView()逐一繪制每一行。getItem返回該對象本身,getItemid返回該對象的索引。getView()有三個參數,position表示將顯示的是第幾行,covertView是從布局文件中inflate來的布局,即list_item.XML文件中的布局。

                                                 

 

  在getView函數中使用ViewHolder的作用是用來優化顯示效率,即之前顯示過的不用再從布局文件讀取,直接從緩存中讀取。它只是一個靜態類,它的作用就在於減少不必要的調用findViewById,把對底下的控件引用存在ViewHolder里面,再用convertView.setTag(holder)把它放在view里,下次就可以用(ViewHolder) convertView.getTag()直接取了。

3.4.3利用Handler來實現天氣信息更新

  Handler與調用者處於同一線程,如果Handler里面做耗時的動作,調用者線程會阻塞,這種操作線程是不安全的。因此本程序采取調用線程Thread(Runnable),在線程中處理操作。Thread線程發出Handler消息,通知更新,Handler根據接收的消息,處理更新。

                                                         

  Thread線程在查詢完天氣后發出msg信息,Handler根據接收的消息顯示查詢結果。

 

4系統測試

4.1測試目的

  1.確定軟件質量,確保軟件正確運行。

  2.確定信息正確性,確保天氣情況與實際相符。

4.2測試內容

  1.在文本欄中輸入城市

       

  2.在下拉欄中選擇城市

      

  3.在輸入欄中輸入不存在的城市

       

       4.不輸入城市查詢

        

 

 

5總結

  本次實驗主要完成了一款基於android平台的天氣預報軟件的設計與實現。提出了android用戶界面設計、獲取並解析城市列表數據的辦法,給出了在用戶界面上的原理與實現過程,最后通過模擬器進行了應用程序的調試。

  本程序能實現當日及未來一個星期的天氣預報,有良好的穩定性及擴展性,但是有待完善的地方依然很多,未來改進時可以考慮一下幾點:加入國際城市;根據不同天氣狀態動態變化背景圖片;可以添加常用城市;將軟件做成桌面小窗口方便查詢。這些功能都需要在日后學習中不斷探索研究,以建立實用的天氣預報系統。

  感謝婁老師和同學們給予我的幫助!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM