Android實踐項目彙報(總結)-修改

來源:互聯網
上載者:User

標籤:

天氣用戶端開發報告

1系統需求分析

1.1功能性需求分析

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

1.2非功能需求分析

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

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

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

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

4)系統的資源低消耗性

1.3 UML使用案例圖

 

 

 

用例名稱:菜單介面

參與者:使用者

簡要說明:使用者選擇城市後,點擊查詢,即可在首頁顯示天氣資訊

前置條件:使用者已經進入天氣查詢軟體

基本事件流:1.使用者在輸入欄輸入城市名稱,點擊查詢,擷取該城市天氣資訊

            2.使用者在下拉欄選擇城市名稱,點擊查詢,擷取該城市天氣資訊

            3.用例終止

其他事件流:在點擊查詢前,輸入或選擇任意城市名都不會顯示結果

例外狀況事件流:天氣資訊擷取失敗時,介面提示錯誤資訊

後置條件:顯示城市一星期以內天氣資訊

 

 

 

 

2系統架構設計

2.1介面架構

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

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

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

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

 

 

2.2功能模組

  

  從模組結構圖可以看出,後台服務是整個程式的核心,主要是資料擷取模組,負責從haoserver天氣預報服務介面獲得天氣資訊。後台服務可以通過查詢服務來啟動。

 

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 系統模組設計

 

  整個系統由四個模組組成

           系統模組

          模組功能

           ConstData

         存放預設城市

             Weather

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

             chacun

         解析並獲得天氣資訊

          MainActivity

         天氣查詢主介面

 

3.2.1 設定天氣類Weather

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

  (1)定義私人變數

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

  (2)建構函式

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

  (3)提供取值方法

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

 

3.2.2天氣查詢功能設計

  (1)解析天氣資訊

  

  天氣預報系統最重要的就是擷取天氣資訊,為獲得即時天氣資訊,我們就要訪問專門天氣資訊的網站把返回的資訊解析出來。

   系統採取HttpURLConnection的訪問方式來和Web 客戶機取得聯絡,並以位元組數組的方式返回。其中urlPath由三部分組成:

資訊源網址

cityname

key

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

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

  (2)獲得天氣資訊

  將解析後的JSON格式天氣資料分別賦值給定義的todayWeather類和we類,它們是執行個體化的天氣類Weather,分別表示當天天氣資訊和未來天氣資訊,最後添加到數組列表weathers中。這樣就能獲得天氣資訊。

 

3.2.3主程式設計

  (1)設定Activity介面

  使用Activity中的onCreate方法來初始化Activity執行個體對象,構建參數saveInsanceState儲存執行個體狀態。

  通過setContentView(R.layout.activity_main)將主程式MainActivity採用activity_main布局。利用findViewById函數將主程式按鈕與布局檔案一一對應,對應列表如下:

 

主程式MainActivity

activity_main介面

currentCityTv

currentCity

city_Et

cityEt

city_spr

citySpinner

mListView

mListView

 

   其中下拉欄Spinner與顯示列表Listview綁定對應的適配器。適配器將布局檔案和資料連線。

          

  (2)顯示天氣

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

                  

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

 

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

  (3)利用Handler來實現天氣資訊更新

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

 

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

 

4系統測試

 

4.1測試目的

1.確定軟體品質,確保軟體正確運行。

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

4.2測試內容

編號

許可權

測試頁

描述/輸入/操作

期望結果

真實結果

備忘

01

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

列表頁面

 

在文本欄中輸入城市

顯示輸入城市

顯示輸入城市

 

測試圖1

02

在下拉欄中選擇城市

顯示選擇城市

顯示選擇城市

測試圖2

03

在文本欄中輸入城市

      點擊查詢

 

顯示輸入城市及對應天氣資訊

顯示輸入城市及對應天氣資訊

測試圖3

04

在下拉欄中選擇城市

    點擊查詢

 

顯示選擇城市及對應天氣資訊

顯示選擇城市及對應天氣資訊

測試圖4

05

在輸入欄中輸入不存在的城市點擊查詢

顯示查詢錯誤及其原因

顯示查詢錯誤及其原因:該城市名稱錯誤或不支援該城市

測試圖5

06

不輸入城市查詢

 

顯示查詢錯誤及其原因

顯示查詢錯誤及其原因:查詢錯誤不可為空

測試圖6

 

1.在文本欄中輸入城市

 

2.在下拉欄中選擇城市

3.在文本欄中輸入城市,點擊查詢

 

4.在下拉欄中選擇城市,點擊查詢

   

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

 

6.不輸入城市查詢

 

 

 

5總結

  本次實驗主要完成了一款基於android平台的天氣預報軟體的設計與實現。提出了android使用者介面設計、擷取並解析城市列表資料的辦法,給出了在使用者介面上的原理與實現過程,最後通過模擬器進行了應用程式的調試。

  從一開始什麼都不懂到最後摸索完成這個軟體收穫很多,主要熟悉了Android環境搭建、介面控局布置、擷取資料和整體設計方案。最終實現選擇城市和顯示天氣預報結果功能。在開發中遇到很多問題:資料來源不提供介面服務、代碼不夠健壯、JSON資料顯示不全、Key到期,最終問題都得到解決。

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

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

 

Android實踐項目彙報(總結)-修改

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.