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

下載本文檔

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

文檔簡介

1、<p><b>  河北農業(yè)大學</b></p><p>  本科畢業(yè)論文(設計)</p><p>  題 目: 基于android系統(tǒng)的天氣預報查詢系統(tǒng) </p><p>  學 院: 信息科學與技術學院 </p><p>  專業(yè)班級: 計算機專升本1101班 </p><p

2、>  學 號: 2011232010130 </p><p>  學生姓名: 田燕玲 </p><p>  指導教師姓名: 趙洋 </p><p>  指導教師職稱: 副教授 </p><p>  2013 年 6 月 1 日&l

3、t;/p><p><b>  摘 要</b></p><p>  近幾年來隨著3G技術成熟和智能手機的不斷普及,移動應用的需求與日俱增,移動應用開發(fā)成為當下最熱門的技術之一。在Google和Android手機聯(lián)盟的共同推動下,Android在眾多移動應用開發(fā)平臺中脫穎而出。Android是一個真正意義上的開源智能手機操作系統(tǒng),該系統(tǒng)一經推出立即受到全球移動設備廠商和

4、開發(fā)者的熱捧,手機已被賦予了除通話以外的其它許多功能。全新的手機軟件領域已逐漸聚焦了眾多軟件開發(fā)商的目光,軟件開發(fā)者和軟件用戶將共同面臨這個振奮人心的新境界。 </p><p>  本設計使用Android設計技術開發(fā)了一種運用在Android系統(tǒng)上的手機天氣預報軟件系統(tǒng),本系統(tǒng)通過選擇城市來獲得天氣,風向,溫度等信息。基于android的天氣預報系統(tǒng)軟件可以使用戶對于各地的天氣情況的實時掌握,極大的方便了用戶

5、的出行和行程安排,避免了不必要的麻煩,具有很強的實用性。</p><p>  關鍵詞:天氣預報系統(tǒng);android開發(fā)</p><p><b>  Abstract</b></p><p>  In recent years, with the 3G technology matures and the growing popularity o

6、f smart phones, the increasing demand for mobile applications, mobile application development become the most popular technology. Given a friendly boost by Google and Android Handset Alliance, Android stands out in numer

7、ous mobile application development platforms. Android is a truly open-source smart phone operating system, which once launched immediately by the global mobile device manufacturers and developers blitz, m</p><

8、p>  This design uses design techniques developed an Android application in the Android system mobile weather software system, the system by selecting the city to get weather, wind direction, temperature and other info

9、rmation. Android based software allows users to weather forecasting system for real-time weather conditions around the master, a great convenience to the user's travel and travel arrangements, to avoid unnecessary tr

10、ouble, and highly practical.</p><p>  Keywords: Weather forecast system; android development</p><p><b>  目 錄</b></p><p><b>  1. 需求分析1</b></p><

11、;p>  1.1 開發(fā)背景1</p><p>  1.2 系統(tǒng)研究內容1</p><p>  1.3 項目需求分析1</p><p>  2. Google android移動平臺的相關理論1</p><p>  2.1 Google android 移動平臺的概述1</p><p>  2.1.1 A

12、ndroid系統(tǒng)的特點2</p><p>  2.1.2 Android的功能2</p><p>  2.2 Google android移動平臺開發(fā)過程研究2</p><p>  2.3 Google android移動平臺下的應用研究3</p><p><b>  2.4 小結3</b></p>

13、<p><b>  3. 項目設計4</b></p><p>  3.1 項目總體設計4</p><p>  3.2 系統(tǒng)功能界面4</p><p>  3.2.1 歡迎界面4</p><p>  3.2.2 設置所在城市界面5</p><p>  3.2.3 天氣顯示界面

14、6</p><p>  3.2.4 Widget桌面小部件界面7</p><p>  3.3 設計目標8</p><p><b>  4. 系統(tǒng)設計8</b></p><p>  4.1 開發(fā)及運行環(huán)境8</p><p>  4.2 數(shù)據(jù)庫設計8</p><p>

15、;  4.3 主要方法及步驟8</p><p>  4.4 主要方法及技術9</p><p><b>  5. 主要模塊9</b></p><p>  5.1 項目框架9</p><p>  5.2 主要功能實現(xiàn)10</p><p>  5.2.1 導入db_weather.db數(shù)據(jù)庫文

16、件10</p><p>  5.2.2 實現(xiàn)城市列表的創(chuàng)建與過濾11</p><p>  5.2.3 訪問網絡得到天氣信息14</p><p>  5.2.4 Widget窗體小部件的更新15</p><p>  6. 功能測試17</p><p><b>  結論21</b><

17、/p><p><b>  參考文獻22</b></p><p>  基于android系統(tǒng)的天氣預報查詢系統(tǒng)</p><p><b>  1. 需求分析</b></p><p><b>  1.1 開發(fā)背景</b></p><p>  近幾年來隨著3G技術

18、成熟和智能手機的不斷普及,移動應用的需求與日俱增,移動應用開發(fā)成為當下最熱門的技術之一。手機是已經成為了生活中不可少的通讀設備,沒有手機有時會讓人覺得寸步難行,手機將脫離傳統(tǒng)的打電話,發(fā)短信等基本功能,而基于智能手機的處理能力和擴展能力,基于3G網絡高速數(shù)據(jù)傳輸,越來越多的功能和業(yè)務將被開發(fā)出來并大規(guī)模的應用。在Google和Android手機聯(lián)盟的共同推動下,Android在眾多移動應用開發(fā)平臺中脫穎而出。Android是一個真正意義

19、上的開源智能手機操作系統(tǒng),該系統(tǒng)一經推出立即受到全球移動設備廠商和開發(fā)者的熱捧。為順應潮流,本設計旨在搭載Android的移動設備上運行,實現(xiàn)天氣狀況的實時動態(tài)更新與顯示,方便人們的出行與生活。</p><p>  1.2 系統(tǒng)研究內容</p><p><b>  1. 界面的設計</b></p><p><b>  2. 代碼的設計

20、</b></p><p><b>  3. 程序的測試</b></p><p><b>  4. 產品的發(fā)布</b></p><p>  1.3 項目需求分析</p><p>  根據(jù)功能的需求,分析此項目的主要功能應具備以下幾點:</p><p>  1. 精

21、確查詢全國各地城市未來幾天內的實時天氣狀況</p><p>  2. 系統(tǒng)要具有實用性,符合用戶查看信息習慣,界面設計優(yōu)美</p><p>  3. 系統(tǒng)要具有穩(wěn)定性,且在一定程度上節(jié)省流量的開銷</p><p>  2. Google android移動平臺的相關理論</p><p>  2.1 Google android 移動平臺的概述

22、</p><p>  Android 是 Google公司于07年11月5日宣布的基于LINUX平臺開源手機操作系統(tǒng),該平臺由操作系統(tǒng),中間件,用戶界面和應用軟件組成,Android是Google開發(fā)的基于Linux平臺的開源手機操作系統(tǒng)。它包括操統(tǒng),用戶界面和應用程序----移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產業(yè)創(chuàng)新的專有權障礙,谷歌與開放手機聯(lián)盟合作開發(fā)了Android,這個聯(lián)盟由包括中國

23、移動,摩托羅拉,高通,宏達在內的30多家技術和無線應用的領軍企業(yè)組成。通過與運營商,設備制造商,開發(fā)商和其他有關各方結成深層次的合作伙伴關系,希望借助建立標準化,開放式的移動電話軟件平臺,在移動產業(yè)內形成一個開放式生態(tài)系統(tǒng)。</p><p>  2.1.1 Android系統(tǒng)的特點</p><p>  1.開放性。Google與開放性手機聯(lián)盟合作開發(fā)了android,Google通過與運營

24、商,設備制造商,開發(fā)商和其他有關各方結成深層次的合作伙伴關系,希望借助建立標準化,開放式的移動電話軟件平臺,在移動產業(yè)內形成一個開放式生態(tài)系統(tǒng)。</p><p>  2.應用程序無界限。Android上的應用可以通過標準API訪問核心移動設備功能。通過互聯(lián)網,應用程序可以聲明它們的功能可提供其它應用程序使用。</p><p>  3.應用程序是在平等的條件下創(chuàng)建的,移動設備上的應用程序可以

25、被替換或擴展,即使是撥號或主屏幕這樣的核心組件。</p><p>  4.應用程序可以輕松地嵌入網絡。應用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過Web view顯示內容。</p><p>  5.應用程序可以并行運行。Android是一種完整的多任務環(huán)境,應用程序可以在其中并行運行,在后臺運行時,應用程序可以生成通知引起注意。</p><p

26、>  2.1.2 Android的功能</p><p>  1.支持虛擬鍵盤。虛擬鍵盤的出現(xiàn)意味著基于Android1.5或以上的版本的移動設備可以同時支持物理鍵盤和虛擬鍵盤。</p><p>  2.使用widget實現(xiàn)桌面的個性化??梢杂脀idget修飾自己的桌面。大多數(shù)小的Web應用都是從網絡上獲得實時數(shù)據(jù)并展示給用戶的,android預裝了Widget,包括數(shù)字時鐘,日歷,

27、音樂播放器,相框。</p><p>  3.用在線文件快速瀏覽數(shù)數(shù),類似于OSX Leopard的Quick look特征,Android的在線文件夾可顯示的數(shù)據(jù)條目,比如聯(lián)系人,喜歡的應用,E-mail信息,播放列表,書簽,RSS源等,并不需要運行系統(tǒng)程序處理特定的數(shù)據(jù)條目。</p><p>  4.視頻錄制和分享。Android還有錄制和分享視頻的功能,對回放和MPEG-4,3GP等視

28、頻也有了更好的支持??梢酝ㄟ^E-mail,MMS或直接上傳等方式來分享視頻。</p><p>  5.更快,更兼容的瀏覽器,Android的基于WebKit內核的瀏覽器帶來了重要的調速半置,這得益于新的WebKit渲染引擎和優(yōu)化的JAVA腳本編譯器。</p><p>  6.Voice search語音搜索。帶有語音識別技術的Google手機已于2008年11月面世,它支持語音搜索功能,該

29、功能增強了默認的搜索能力,已超過了純文本搜索。</p><p>  7.立體藍牙和免提電話。除了增強的免提電話體驗,Android還支持立體藍牙(A2Dphe和AVCRP),并有自動配對功能。</p><p>  8.強大的GPS技術.Android內部提供了大量的GPS組件,我們可以很輕松地獲得設備當前的位置等信息,讓導航等功能更加完善。</p><p>  9.

30、Android系統(tǒng)硬件檢測,android可自動檢測和修復SD卡的文件系統(tǒng),允許第三方應用顯示Android系統(tǒng)的硬件特征,為了讓用戶下載到與自己的設備匹配的應用,我們可以檢測用戶設備的硬件信息,讓滿足應用要求的設備安裝該程序。</p><p>  2.2 Google android移動平臺開發(fā)過程研究</p><p>  Android移動平臺作為21世紀的新秀,受到了越來越多的開發(fā)者

31、的鐘愛,在這股開發(fā)的浪潮中,逐漸形成了具有Android一套具有Android特色的開發(fā)流程。</p><p>  由于Android的優(yōu)越性,其開發(fā)顯得非常的有規(guī)律可尋。大致的開發(fā)流程如下:</p><p>  需求分析:作為一個軟件,它必須有其存在的意義和價值,而這個價值和意義就需要靠需求分析來確定。</p><p>  功能分析。作為一個手機軟件,它的使命就是

32、給用戶使用的。如何提供用戶最好的用戶體驗就值得每一個程序員的深思,這也是確保一個程序成功的關鍵所在。</p><p>  界面設計:作為一個手機軟件,其只能在極有限的區(qū)域中顯示,如何在有限的空間里更完美的展現(xiàn)出自己的獨特之處就顯得更為重要了。</p><p>  測試:在任何一個軟件開發(fā)行業(yè)中,無論是J2EE,J2SE,J2ME等等其他開發(fā)中,測試時必不可少的一環(huán),在Android開發(fā)中,

33、由于手機的高頻率使用,和硬件系統(tǒng)上的不足,使得對軟件的要求更加的嚴格,這就要求在開發(fā)完成后,再對其進行嚴格的測試,而測試又包括了:單元測試,系統(tǒng)測試等方面的測試。</p><p>  系統(tǒng)開發(fā):作為一個軟件的主體部分,系統(tǒng)開發(fā)的好壞直接決定了該系統(tǒng)的性能和壽命。</p><p>  發(fā)布:在完成一個系統(tǒng)的開發(fā)后,就要對其發(fā)布,經過廣大用戶的考驗,只有經過這個過程,才算是一個合格的產品,在A

34、ndroid平臺中,Google提供了完整的發(fā)布機制------Google market。</p><p>  2.3 Google android移動平臺下的應用研究</p><p>  Android系統(tǒng)提供給應用開發(fā)者本身就是一個框架,所有的應用開發(fā)都必須遵守這個框架原則。我們在開發(fā)應用時就是在這個框架上進行擴展,下面來看看android這個框架都有些什么功能可供我們使用。<

35、/p><p>  Android.app:提供高層的程序模型和基本的運行環(huán)境</p><p>  Android.content:包含對各種設備上的數(shù)據(jù)進行訪問和發(fā)布</p><p>  Android.database:通過內容提供者瀏覽的操作數(shù)據(jù)庫</p><p>  Android.graphics:圖形庫,包含畫布,顏色過濾,點,矩形,可

36、以將它們直接繪制到屏幕上。</p><p>  Android.location:定位和相關服務的類</p><p>  Android.net: 提供幫助網絡訪問類,超過通常的java.net*接口。</p><p>  Android.media: 提供一些類管理多種音頻,視頻的媒體接口。</p><p>  Android.os:提供了

37、系統(tǒng)服務,消息轉輸和IPC機制。</p><p>  Android.opngl:提供OpenGL的工具。</p><p>  Android.provider:提供訪問Android的內容提供者的類。</p><p>  Android.telephony:提供與撥打電話相關的API交互。</p><p>  Android.view提供基

38、礎的用戶界面接口框架。</p><p>  Android.util:涉及工具性的方法,例如時間日期的操作。</p><p>  Addroid.webkit:默認瀏覽器操作接口。</p><p>  Android.widget包含各種UI元素在應用程序的布局中使用。</p><p><b>  2.4 小結</b>

39、</p><p>  本章主要通過三個方面:1.Google android移動平臺的概述:2. Google android移動平臺開發(fā)過程的研究:3. Google android移動平臺下的應用研究,概要的介紹了Google android移動平臺相關知識,對Google android移動平臺有初步的認識和了解,為后面的開發(fā)做了堅實的基礎。</p><p><b>  3

40、. 項目設計</b></p><p>  3.1 項目總體設計</p><p>  本軟件是一個App Widget應用程序,啟動程序后可以進行城市的設置,可以通過圖片和文字顯示當前和未來兩天的天氣狀況,包括溫度、風向和雨雪情況等。</p><p>  該軟件的基本功能需求有:</p><p><b>  1.歡迎界面&

41、lt;/b></p><p>  系統(tǒng)啟動時首先進入歡迎界面;</p><p>  2.啟動App Widget應用程序</p><p>  為了方便用戶實時了解天氣狀況,特別添加在Android系統(tǒng)桌面上顯示當前天氣與時間的天氣小部件,使用戶拿起手機的第一時刻就能了解天氣,同時當用戶單擊小部件時,自動跳轉至天氣顯示界面,顯示三天內的詳細天氣。</p&g

42、t;<p>  3.設置所在城市界面</p><p>  通過可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫中預存的城市來進行設置,同時為了方便用戶查找,支持以輸入框的形式來過濾查詢預報城市。當單擊選中城市時跳轉至天氣顯示界面,來顯示該城市當三天內的天氣狀況;第一次運行時自動跳到該界面。</p><p><b>  4.顯示天氣界面</b></p>&

43、lt;p>  顯示指定城市三天內的天氣狀況,包括日期、城市名稱、溫度、風力與當日的建議,用戶可通過按菜單鍵來顯示菜單更新當前天氣與設置天氣顯示的界面背景,以及跳轉至設置預報城市界面來更換預報城市。</p><p>  3.2 系統(tǒng)功能界面</p><p>  3.2.1 歡迎界面</p><p>  當系統(tǒng)啟動時,首先會顯示歡迎界面。如圖3-1所示:</

44、p><p><b>  圖3-1 歡迎界面</b></p><p>  3.2.2 設置所在城市界面</p><p>  1.當?shù)谝淮芜\行程序時,跳轉至城市設置界面進行預報城市的選擇,如圖3-2所示:</p><p><b>  圖3-2 設置城市</b></p><p>  2

45、. 用戶可通過輸入框過濾查詢當前系統(tǒng)中預存的城市,如圖3-3所示:</p><p>  圖3-3 過濾框輸入選擇城市</p><p>  3.2.3 天氣顯示界面</p><p>  1.選擇了預報城市后,系統(tǒng)跳轉至天氣顯示界面,顯示該城市三天內的實時天氣,</p><p><b>  如圖3-4所示: </b><

46、/p><p><b>  圖3-4 顯示天氣</b></p><p>  2. 在天氣界面中用戶可通過按菜單鍵來調出菜單,設置城市,更新天氣與更換背景,如圖3-5所示:</p><p><b>  圖3-5 調出菜單</b></p><p>  3.2.4 Widget桌面小部件界面</p>

47、<p>  方便用戶第一時間了解天氣動態(tài),添加widget顯示功能界面,如圖3-6所示: </p><p>  圖3-6 Widget桌面小部件</p><p><b>  3.3 設計目標</b></p><p>  設計完成一個實用穩(wěn)定的天氣預報系統(tǒng),同時要廉價使其能滿足大部分用戶的需求,因此針對上述要求,本設計應滿足:<

48、;/p><p>  1.系統(tǒng)能及時的反饋指定預報城市的天氣情況;</p><p>  2. 可設置所在城市,自行輸入或者列表選擇城市;</p><p>  3.節(jié)省流量開銷,規(guī)定在指定的時間間隔內才更新天氣,其它時段顯示緩存的天氣;</p><p>  4.操作方便快捷,使用簡單,界面設計美觀大方,支持widget。</p><

49、;p><b>  4. 系統(tǒng)設計</b></p><p>  4.1 開發(fā)及運行環(huán)境</p><p>  1. JDK1.6.0 _10</p><p>  2. Eclipse3.8</p><p>  3. Android Development Toolkit (ADT) 21.0.1 </p>

50、<p>  4. Android 2.2及以上 </p><p>  5. Windows 7 </p><p><b>  4.2 數(shù)據(jù)庫設計</b></p><p>  由于在本系統(tǒng)中是通過訪問中央氣象臺提供的天氣信息得到的天氣預報,在查詢指定城市的天氣時,需要用到它提供的城市碼,而城市碼相對穩(wěn)定不變,所以在構建系統(tǒng)時將其事先通

51、過Android的網絡訪問技術將其緩沖到本地SQLite數(shù)據(jù)庫進行保存起來,方便以后的查詢,同時節(jié)省了流量開銷。綜上所述在本地建立db_weather.db的數(shù)據(jù)庫,其中只存在兩個表: provinces和citys。citys表中存在city_num用天氣的查詢,同時還存在外鍵province_id與provinces表形成1對n的關系。結構如圖4-1所示:</p><p>  圖4-1 數(shù)據(jù)庫表結構</

52、p><p>  4.3 主要方法及步驟</p><p>  1. 搭建Android開發(fā)環(huán)境,并建立名為WeatherForecastSystem項目。</p><p>  2. 在程序第一次運行時,將db_weather.db數(shù)據(jù)庫文件導入到應用程序數(shù)據(jù)庫中。</p><p>  3. 建立設置城市界面,讀取數(shù)據(jù)庫文件,獲取省份,城市以及對應的

53、城市碼。</p><p>  4. 接收用戶選擇的城市碼,訪問:http://m.weather.com.cn/data/<城市碼>.html得到天氣信息。</p><p>  5. 解析天氣信息,將城市碼及天氣信息緩沖下來,并為其設置有效時間,方便下次啟動時直接得到天氣信息,過期則從網上更新。</p><p>  6. 定時由保存的城市碼更新天氣信息。

54、</p><p>  4.4 主要方法及技術</p><p>  1. Android手機的界面UI設計</p><p>  2. Android的網絡通信</p><p>  3. Android的廣播</p><p>  4. Widget小部件編程</p><p><b>  5

55、. JSON解析</b></p><p>  6. SQLite數(shù)據(jù)庫操作</p><p>  7. Android文件操作</p><p><b>  5. 主要模塊</b></p><p><b>  5.1 項目框架</b></p><p>  在裝有ADT

56、插件的Eclipse中新建一個名為WeatherForecastSystem的項目,項目主要文件結構如圖5-1所示:</p><p>  圖5-1 WeatherForecastSystem工程的源代碼文件結構</p><p>  為了使源代碼文件的結構更加清晰,WeatherForecastSystem工程設置了多個命名空間,分別用來保存用戶界面、數(shù)據(jù)庫、后臺服務和工具實體的源代碼文件。

57、源代碼文件的名稱以及說明如表5-1所示。</p><p>  5.2 主要功能實現(xiàn)</p><p>  5.2.1 導入db_weather.db數(shù)據(jù)庫文件</p><p>  public void importInitDatabase() {</p><p><b>  //數(shù)據(jù)庫的目錄</b></p>

58、<p>  String dirPath="/data/data/com.weather.app/databases";</p><p>  File dir = new File (dirPath);</p><p>  if (!dir.exists()) {</p><p>  dir.mkdir ();</p>

59、<p><b>  }</b></p><p><b>  //數(shù)據(jù)庫文件</b></p><p>  File dbfile = new File(dir, "db_weather.db");</p><p><b>  try {</b></p>&l

60、t;p>  if(!dbfile.exists()) {</p><p>  dbfile.createNewFile();</p><p><b>  }</b></p><p>  //加載欲導入的數(shù)據(jù)庫</p><p>  InputStream is= this.getApplicationContext(

61、).getResources().openRawResource(R.raw.db_weather);</p><p>  FileOutputStream fos = new FileOutputStream(dbfile);</p><p>  byte[] buffere=new byte[is.available()];</p><p>  is.read(

62、buffere);</p><p>  fos.write(buffere);</p><p>  is.close();</p><p>  fos.close();</p><p>  }catch(FileNotFoundException e){</p><p>  e.printStackTrace();&

63、lt;/p><p>  }catch(IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p>  5.2.2 實現(xiàn)城市列表的創(chuàng)建與過濾</

64、p><p>  實現(xiàn)城市列表是通過繼承android.widget.BaseExpandableListAdapter適配器實現(xiàn)的,其中主要實現(xiàn)它的public View getGroupView()得到列表的一級列表和public void getChildView()得到列表的二級子列表實現(xiàn)的,在這里由于只是實現(xiàn)文本顯示功能,故用TextView組件來填充就行了,如果要構造這個自定義的適配器,則只需在提供存放省份

65、直轄市的一級列表的數(shù)組String[] groups和存放對應的城鎮(zhèn)的二級列表的String[][] childs就行了。</p><p><b>  @Override</b></p><p>  public View getChildView(int groupPosition, int childPosition,</p><p>  

66、boolean isLastChild, View convertView, ViewGroup parent) {</p><p>  TextView textView = null;</p><p>  //這里判斷convertView是否為空</p><p>  if(convertView==null) {</p><p>  /

67、/產生一個TextView組件</p><p>  textView = getGenericView();</p><p>  //設置它的文本內容</p><p>  textView.setText(getChild(groupPosition,childPosition).toString());</p><p><b> 

68、 } else {</b></p><p>  textView = (TextView)convertView;</p><p>  textView.setText(getChild(groupPosition,childPosition).toString());</p><p><b>  }</b></p>

69、<p>  return textView;</p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public View getGroupView(int groupPosition, boolean isExpanded,</p>&

70、lt;p>  View convertView, ViewGroup parent) {</p><p>  TextView textView = null;</p><p>  if(convertView==null){</p><p>  textView = getGenericView();</p><p>  textVi

71、ew.setText(getGroup(groupPosition).toString());</p><p><b>  }else {</b></p><p>  textView = (TextView)convertView;</p><p>  textView.setText(getGroup(groupPosition).toSt

72、ring());</p><p><b>  }</b></p><p>  return textView;</p><p><b>  }</b></p><p>  private TextView getGenericView() {</p><p>  AbsLis

73、tView.LayoutParams lp = new AbsListView.LayoutParams(</p><p>  ViewGroup.LayoutParams.FILL_PARENT, 48);</p><p>  TextView textView = new TextView(context);</p><p>  textView.setLayo

74、utParams(lp);</p><p>  textView.setTextSize(18);</p><p>  textView.setTextColor(Color.WHITE);</p><p>  textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);</p><p&

75、gt;  textView.setPadding(32, 0, 0, 0);</p><p>  return textView;</p><p><b>  }</b></p><p>  同時為了兼具過濾功能,還需再實現(xiàn)android.widget.Filterable接口,這個接口有一個getFilter()返回Filter過濾器的列表,

76、故還要提供一個Filter過濾類,在本系統(tǒng)中,實現(xiàn)的是一個內部類CityFilter,它繼承android.widget.Filter類,覆蓋實現(xiàn)了兩個方法,一個是performFiltering()得到FilterResults過濾結果對象方法,另一個是根據(jù)得到的FilterResults對象更新適配器的publishResults()方法。</p><p>  其中的performFiltering(Char

77、Sequence constraint)方法的實現(xiàn)是通過constraint這個關鍵字以省份直轄市為單位進行匹配,如果匹配成功,則添加該省份以下的所有城市,如果匹配不成功,則再逐一與這個省份下的城市匹配,則只添加匹配的城市,其中匹配的結果放在Map<Integer,ArrayList<Integer>>values這樣的向量中,再由新建的FilterResults封裝返回,(具體實現(xiàn)如下):</p>

78、<p>  1. 首先是對關鍵字進行判斷是否為空,如為空則由values添加所有省份與城市,其中的allGroups和allChilds保存的是所有的省份與對應的城市:</p><p>  //當過濾條件為空時,返回所有的省份與城市 </p><p>  if(constraint == null || constraint.length() == 0) { </p>

79、;<p>  for(int i=0; i<allGroups.length; i++) { </p><p>  ArrayList<Integer> index = new ArrayList<Integer>(); </p><p>  //添加所有與之對應的城市 </p><p>  for(int j=0; j&

80、lt;allChilds[i].length; j++) { </p><p>  index.add(j); </p><p><b>  } </b></p><p>  values.put(i, index); </p><p><b>  } </b></p><p&g

81、t;<b>  } </b></p><p>  2. 如果關鍵字constraint不為空,則以省份為單位進行匹配,省份匹配的添加下面的所在城鎮(zhèn),如果不匹配,則進一步深入匹配城鎮(zhèn),添加符合條件的城鎮(zhèn):</p><p>  String filterStr = constraint.toString(); </p><p>  for(int

82、i=0; i<allGroups.length; i++) { </p><p>  //查找省名是否包含用戶輸入的字符串 </p><p>  if(allGroups[i].contains(filterStr)) { </p><p>  ArrayList<Integer> index = new ArrayList<Integer&

83、gt;(); </p><p>  //添加所有與之對應的城市 </p><p>  for(int j=0; j<allChilds[i].length; j++) { </p><p>  index.add(j); </p><p><b>  } </b></p><p>  val

84、ues.put(i, index); </p><p><b>  } else { </b></p><p>  ArrayList<Integer> index = new ArrayList<Integer>(); </p><p>  //如果省份名沒有,則查找它下面的城市名是否包含 </p>&l

85、t;p>  for(int j=0; j<allChilds[i].length; j++) { </p><p>  if(allChilds[i][j].contains(filterStr)) { </p><p>  index.add(j); </p><p><b>  } </b></p><p&g

86、t;<b>  } </b></p><p>  //如果添加進入了城市,說明存在,則它的省份也添加進去 </p><p>  if(index.size() > 0) { </p><p>  values.put(i, index); </p><p><b>  } else { </b>

87、;</p><p>  index = null; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  3. 得到過濾的結果后將其用FilterResourc

88、e封裝后返回:</p><p>  FilterResults results = new FilterResults(); </p><p>  results.values = values; </p><p>  results.count = values.size(); </p><p>  另外的publishResults(Ch

89、arSequence constraint,FilterResults results)方法就是根據(jù)上面得到的results對象來得到新的String[] groups與String[][] Childs數(shù)組,再調用BaseExpandableListAdapter父類的notifyDataSetChanged()方法來更新列表,從而實現(xiàn)過濾后結果的顯示(具體實現(xiàn)如下):</p><p>  1. 首先將Filt

90、ersResult對象Map<Integer,ArrayList<Integer>>filterResult,然后來判斷過濾后的結果長度是否為0,如果長度為0則說明過濾后的結果為空,則調用父類的notifyDataSetInvalidated()方法阻止列表更新。</p><p>  2. 如果長度不為0,則說明存在過濾結果,則將它轉換為groups數(shù)組與childs數(shù)組,并調用notif

91、yDataSetChanged()方法實再更新:</p><p>  如上所述則就實現(xiàn)了帶有過濾性可伸展性列表適配性的實現(xiàn),則在使用時在XML組件配置文件中使用ExpandableListView列表,并調用它的setAdapter()方法來加載自定義的適配器。而在使用它的過濾功能時則調用自定義適配器的getFilter()得到過濾Filter對象,再調用Filter對象的filter(String)方法實現(xiàn)的,

92、在本系統(tǒng)中用觸發(fā)文本輸入框EditText的TextChangedListener事件調用從而實現(xiàn)手動選擇所在城市的過濾查詢。</p><p>  5.2.3 訪問網絡得到天氣信息</p><p>  接收用戶選擇的城市碼,訪問:http://m.weather.com.cn/data/<城市碼>.html得到天氣信息。首先實現(xiàn)上述功能需使用Android的網絡訪問技術,故編寫

93、工具類WebAccessTools類如下:</p><p>  public class WebAccessTools {</p><p>  private Context context;</p><p>  public WebAccessTools(Context context) {</p><p>  this.context =

94、 context;</p><p><b>  }</b></p><p>  public String getWebContent(String url) {</p><p>  //創(chuàng)建一個http請求對象</p><p>  HttpGet request = new HttpGet(url);</p&g

95、t;<p>  //創(chuàng)建HttpParams以用來設置HTTP參數(shù)</p><p>  HttpParams params=new BasicHttpParams();</p><p>  //設置連接超時或響應超時</p><p>  HttpConnectionParams.setConnectionTimeout(params, 3000);&l

96、t;/p><p>  HttpConnectionParams.setSoTimeout(params, 5000);</p><p>  //創(chuàng)建一個網絡訪問處理對象</p><p>  HttpClient httpClient = new DefaultHttpClient(params);</p><p><b>  try{&

97、lt;/b></p><p><b>  //執(zhí)行請求參數(shù)項</b></p><p>  HttpResponse response = httpClient.execute(request);</p><p>  //判斷是否請求成功</p><p>  if(response.getStatusLine().g

98、etStatusCode() == HttpStatus.SC_OK) {</p><p><b>  //獲得響應信息</b></p><p>  String content = EntityUtils.toString(response.getEntity());</p><p>  return content;</p>

99、<p><b>  } else {</b></p><p>  //網連接失敗,使用Toast顯示提示信息</p><p>  Toast.makeText(context, "網絡訪問失敗,請檢查您機器的聯(lián)網設備!", Toast.LENGTH_LONG).show();</p><p><b>  

100、}</b></p><p>  }catch(Exception e) {</p><p>  e.printStackTrace();</p><p>  } finally {</p><p>  //釋放網絡連接資源</p><p>  httpClient.getConnectionManager(

101、).shutdown();</p><p><b>  }</b></p><p>  return null;</p><p><b>  }</b></p><p><b>  }</b></p><p>  5.2.4 Widget窗體小部件的更新

102、</p><p>  由于widget中的時鐘關系,需要對widget顯示進行時刻的更新用來保持與系統(tǒng)中時間的一致。實現(xiàn)這個功能需要用到AlarmManager類,這個類專門用來設定在某個指定的時間去完成指定的事件。設計思路是在Widget的onUpdate方法中啟動一個自定義更新后臺服務,更新widget,并設定下一分鐘再次調用此服務。具體實現(xiàn)過步驟如下:</p><p>  1. 首先

103、自定義一個后臺運行服務類繼承至Service類,實現(xiàn)它的服務開始運行調用的onStart()方法:</p><p>  super.onStart(intent, startId); </p><p>  //得到widget的布局對象 </p><p>  RemoteViews views = WeatherWidget.getWeatherView(this

104、); </p><p>  //得到AppWidgetManager widget管理器 </p><p>  AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(this); </p><p>  int[] appids=appWidgetManager.getAppWidgetIds(n

105、ew ComponentName(this, </p><p>  WeatherWidget.class)); </p><p>  //得到城市碼,并更新天氣 </p><p>  SharedPreferences sp=getSharedPreferences( </p><p>  SetCityActivity.CITY_CODE

106、_FILE, </p><p>  SetCityActivity.MODE_PRIVATE); </p><p>  String cityCode= sp.getString("code", ""); </p><p>  if(cityCode!=null&&cityCode.trim().length(

107、) > 0) { </p><p>  WeatherWidget.updateAppWidget(views, this, </p><p>  appWidgetManager, cityCode); </p><p><b>  } </b></p><p>  appWidgetManager.updat

108、eAppWidget(appids, views); </p><p>  //獲取當前時間設置警報服務 </p><p>  Date date = new Date(); </p><p>  long now =date.getTime(); </p><p>  long unit=60000;//間隔一分鐘 </p>

109、<p>  int s=date.getSeconds(); //得到秒數(shù) </p><p>  unit=60000-s*1000; //將時間精確到秒 </p><p>  pintent=PendingIntent.getService(this, 0, intent, 0); </p><p><b>  //計時器 </b>

110、</p><p>  alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE); </p><p>  //AlarmManager.RTC_WAKEUP設置服務在系統(tǒng)休眠時同樣會運行 </p><p>  //第二個參數(shù)是下一次啟動service時間 </p><p>  ala

111、rm.set(AlarmManager.RTC_WAKEUP, now+unit, pintent); </p><p>  2. 然后在實現(xiàn)AppWidgetProvider的widget類的onUpdate方法中啟動這個自定義的服務:</p><p>  //啟動一個自定義更新widget的后臺服務 </p><p>  context.startService

112、(new Intent(context,UpdateWidgetService.class)); </p><p>  3. 除了啟動這個服務是不夠的,當用戶刪除widget部件時,后臺服務也必須停止,這樣就必須實現(xiàn)Service類中的另一個方法onDestroy()方法,該方法在Service停止時調用,在這里用于取消AlarmManager設置的警報服務:</p><p>  //當w

113、idget中通過調用context.stopService方法來指定銷毀service時,被調用 </p><p>  public void onDestroy() { </p><p><b>  //取消定時管理 </b></p><p>  if(alarm!=null) { </p><p>  alarm.c

114、ancel(pintent); </p><p><b>  } </b></p><p>  super.onDestroy(); </p><p><b>  } </b></p><p>  4. 則在widget類的onDisabled()方法中調用stopService方法來停止后臺服務,

115、其中的onDisabled方法在widget被用戶刪除時由系統(tǒng)自動調用:</p><p>  public void onDisabled(Context context) { </p><p>  super.onDisabled(context); </p><p><b>  //關閉后臺服務 </b></p><p&

116、gt;  context.stopService(new Intent(context,UpdateWidgetService.class)); </p><p><b>  } </b></p><p>  在自定了一個Service服務后,系統(tǒng)必須在清單文件AndroidManifest.xml中聲明自定義的服務:</p><p>  &l

117、t;!-- 自定義的后臺更新widget服務 --> </p><p>  <service android:name=".UpdateWidgetService"></service> </p><p>  這樣就實現(xiàn)了widget的更新功能,其實在配制widget的AppWidgetProviderInfo的配制文件中通過設置andro

118、id:updatePeriodMillis屬性來設置widget的自動更新,它的單位中毫秒,但由于自動更新對性能的損壞,故它有一個最低值,這最低值長于一分鐘,故而與該系統(tǒng)的要求不符,故以調用后臺Service的方式來解決。</p><p><b>  6. 功能測試</b></p><p>  本系統(tǒng)的測試,主要是通過手動操作該系統(tǒng),查看是否存在異?;虿僮鞯慕Y果是否符

119、合設計初衷來完成的,現(xiàn)將系統(tǒng)的主要操作結果截圖展示如下:</p><p>  1.系統(tǒng)啟動時首先進入歡迎界面,如圖6-1所示:</p><p><b>  圖6-1 歡迎界面</b></p><p>  2. 當系統(tǒng)初次啟動時,由于沒有設置所在城市,則自動由天氣顯示視圖跳轉到城市設置視圖,并要求用戶選擇所在城市,如圖6-2所示:</p&g

120、t;<p>  圖6-2 初次運行設置城市</p><p>  3. 接下來點擊確定選擇城市,則系統(tǒng)確定用戶單擊城市的城市碼跳轉至天氣顯示界面,如圖6-3所示:</p><p>  圖6-3 顯示天氣界面</p><p>  4. 跳轉到天氣顯示界面后,可單擊“菜單”按鈕來顯示天氣的菜單,如圖6-4所示:</p><p>  圖

溫馨提示

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

評論

0/150

提交評論