畢業(yè)論文-基于android系統(tǒng)的天氣預(yù)報查詢系統(tǒng)_第1頁
畢業(yè)論文-基于android系統(tǒng)的天氣預(yù)報查詢系統(tǒng)_第2頁
畢業(yè)論文-基于android系統(tǒng)的天氣預(yù)報查詢系統(tǒng)_第3頁
畢業(yè)論文-基于android系統(tǒng)的天氣預(yù)報查詢系統(tǒng)_第4頁
畢業(yè)論文-基于android系統(tǒng)的天氣預(yù)報查詢系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、河北農(nóng)業(yè)大學(xué)畢業(yè)設(shè)計PAGE 河北農(nóng)業(yè)大學(xué) 本科畢業(yè)論文(設(shè)計)題 目: 基于android系統(tǒng)的天氣預(yù)報查詢系統(tǒng) 學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 專業(yè)班級: 計算機(jī)專升本1101班 學(xué) 學(xué)生姓名: 指導(dǎo)教師姓名: 指導(dǎo)教師職稱: 副教授 2013 年 6 月 1摘 要近幾年來隨著3G技術(shù)成熟和智能手機(jī)的不斷普及,移動應(yīng)用的需求與日俱增,移動應(yīng)用開發(fā)成為當(dāng)下最熱門的技術(shù)之一。在Google和Android手機(jī)聯(lián)盟的共同推動下,Android在眾多移動應(yīng)用開發(fā)平臺中脫穎而出。Android是一個真正意義上的開源智能手機(jī)操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動設(shè)備廠商和開發(fā)者的熱捧,手機(jī)已被賦予了除

2、通話以外的其它許多功能。全新的手機(jī)軟件領(lǐng)域已逐漸聚焦了眾多軟件開發(fā)商的目光,軟件開發(fā)者和軟件用戶將共同面臨這個振奮人心的新境界。 本設(shè)計使用Android設(shè)計技術(shù)開發(fā)了一種運用在Android系統(tǒng)上的手機(jī)天氣預(yù)報軟件系統(tǒng),本系統(tǒng)通過選擇城市來獲得天氣,風(fēng)向,溫度等信息?;赼ndroid的天氣預(yù)報系統(tǒng)軟件可以使用戶對于各地的天氣情況的實時掌握,極大的方便了用戶的出行和行程安排,避免了不必要的麻煩,具有很強(qiáng)的實用性。關(guān)鍵詞:天氣預(yù)報系統(tǒng);android開發(fā)AbstractIn recent years, with the 3G technology matures and the growing

3、 popularity of 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 numerous mobile application development platforms. Android is a truly op

4、en-source smart phone operating system, which once launched immediately by the global mobile device manufacturers and developers blitz, mobile phones have been given in addition to many other functions outside the phone. The new phone software field has gradually focused the attention of a large num

5、ber of software developers, software developers and software users will be facing this exciting new realm.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, tempera

6、ture and other information. Android based software allows users to weather forecasting system for real-time weather conditions around the master, a great convenience to the users travel and travel arrangements, to avoid unnecessary trouble, and highly practical.Keywords: Weather forecast system; and

7、roid developmentPAGE 22目 錄 TOC o 1-3 h z u HYPERLINK l _Toc358327713 1. 需求分析 PAGEREF _Toc358327713 h 1 HYPERLINK l _Toc358327714 1.1 開發(fā)背景 PAGEREF _Toc358327714 h 1 HYPERLINK l _Toc358327715 1.2 系統(tǒng)研究內(nèi)容 PAGEREF _Toc358327715 h 1 HYPERLINK l _Toc358327716 1.3 項目需求分析 PAGEREF _Toc358327716 h 1 HYPERLINK

8、l _Toc358327717 2. Google android移動平臺的相關(guān)理論 PAGEREF _Toc358327717 h 1 HYPERLINK l _Toc358327718 2.1 Google android 移動平臺的概述 PAGEREF _Toc358327718 h 1 HYPERLINK l _Toc358327719 2.1.1 Android系統(tǒng)的特點 PAGEREF _Toc358327719 h 2 HYPERLINK l _Toc358327720 2.1.2 Android的功能 PAGEREF _Toc358327720 h 2 HYPERLINK l

9、_Toc358327721 2.2 Google android移動平臺開發(fā)過程研究 PAGEREF _Toc358327721 h 2 HYPERLINK l _Toc358327722 2.3 Google android移動平臺下的應(yīng)用研究 PAGEREF _Toc358327722 h 3 HYPERLINK l _Toc358327723 2.4 小結(jié) PAGEREF _Toc358327723 h 3 HYPERLINK l _Toc358327724 3. 項目設(shè)計 PAGEREF _Toc358327724 h 4 HYPERLINK l _Toc358327725 3.1 項

10、目總體設(shè)計 PAGEREF _Toc358327725 h 4 HYPERLINK l _Toc358327726 3.2 系統(tǒng)功能界面 PAGEREF _Toc358327726 h 4 HYPERLINK l _Toc358327727 3.2.1 歡迎界面 PAGEREF _Toc358327727 h 4 HYPERLINK l _Toc358327728 3.2.2 設(shè)置所在城市界面 PAGEREF _Toc358327728 h 5 HYPERLINK l _Toc358327729 3.2.3 天氣顯示界面 PAGEREF _Toc358327729 h 6 HYPERLINK

11、l _Toc358327730 3.2.4 Widget桌面小部件界面 PAGEREF _Toc358327730 h 7 HYPERLINK l _Toc358327731 3.3 設(shè)計目標(biāo) PAGEREF _Toc358327731 h 8 HYPERLINK l _Toc358327732 4. 系統(tǒng)設(shè)計 PAGEREF _Toc358327732 h 8 HYPERLINK l _Toc358327733 4.1 開發(fā)及運行環(huán)境 PAGEREF _Toc358327733 h 8 HYPERLINK l _Toc358327734 4.2 數(shù)據(jù)庫設(shè)計 PAGEREF _Toc35832

12、7734 h 8 HYPERLINK l _Toc358327735 4.3 主要方法及步驟 PAGEREF _Toc358327735 h 8 HYPERLINK l _Toc358327736 4.4 主要方法及技術(shù) PAGEREF _Toc358327736 h 9 HYPERLINK l _Toc358327737 5. 主要模塊 PAGEREF _Toc358327737 h 9 HYPERLINK l _Toc358327738 5.1 項目框架 PAGEREF _Toc358327738 h 9 HYPERLINK l _Toc358327739 5.2 主要功能實現(xiàn) PAGER

13、EF _Toc358327739 h 10 HYPERLINK l _Toc358327740 5.2.1 導(dǎo)入db_weather.db數(shù)據(jù)庫文件 PAGEREF _Toc358327740 h 10 HYPERLINK l _Toc358327741 5.2.2 實現(xiàn)城市列表的創(chuàng)建與過濾 PAGEREF _Toc358327741 h 11 HYPERLINK l _Toc358327742 5.2.3 訪問網(wǎng)絡(luò)得到天氣信息 PAGEREF _Toc358327742 h 14 HYPERLINK l _Toc358327743 5.2.4 Widget窗體小部件的更新 PAGEREF _

14、Toc358327743 h 15 HYPERLINK l _Toc358327744 6. 功能測試 PAGEREF _Toc358327744 h 17 HYPERLINK l _Toc358327745 結(jié)論 PAGEREF _Toc358327745 h 21 HYPERLINK l _Toc358327746 參考文獻(xiàn) PAGEREF _Toc358327746 h 22基于android系統(tǒng)的天氣預(yù)報查詢系統(tǒng)1. 需求分析1.1 開發(fā)背景近幾年來隨著3G技術(shù)成熟和智能手機(jī)的不斷普及,移動應(yīng)用的需求與日俱增,移動應(yīng)用開發(fā)成為當(dāng)下最熱門的技術(shù)之一。手機(jī)是已經(jīng)成為了生活中不可少的通讀設(shè)備

15、,沒有手機(jī)有時會讓人覺得寸步難行,手機(jī)將脫離傳統(tǒng)的打電話,發(fā)短信等基本功能,而基于智能手機(jī)的處理能力和擴(kuò)展能力,基于3G網(wǎng)絡(luò)高速數(shù)據(jù)傳輸,越來越多的功能和業(yè)務(wù)將被開發(fā)出來并大規(guī)模的應(yīng)用。在Google和Android手機(jī)聯(lián)盟的共同推動下,Android在眾多移動應(yīng)用開發(fā)平臺中脫穎而出。Android是一個真正意義上的開源智能手機(jī)操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動設(shè)備廠商和開發(fā)者的熱捧。為順應(yīng)潮流,本設(shè)計旨在搭載Android的移動設(shè)備上運行,實現(xiàn)天氣狀況的實時動態(tài)更新與顯示,方便人們的出行與生活。1.2 系統(tǒng)研究內(nèi)容1. 界面的設(shè)計2. 代碼的設(shè)計3. 程序的測試4. 產(chǎn)品的發(fā)布1.3

16、項目需求分析根據(jù)功能的需求,分析此項目的主要功能應(yīng)具備以下幾點:1. 精確查詢?nèi)珖鞯爻鞘形磥韼滋靸?nèi)的實時天氣狀況2. 系統(tǒng)要具有實用性,符合用戶查看信息習(xí)慣,界面設(shè)計優(yōu)美3. 系統(tǒng)要具有穩(wěn)定性,且在一定程度上節(jié)省流量的開銷2. Google android移動平臺的相關(guān)理論2.1 Google android 移動平臺的概述Android 是 Google公司于07年11月5日宣布的基于LINUX平臺開源手機(jī)操作系統(tǒng),該平臺由操作系統(tǒng),中間件,用戶界面和應(yīng)用軟件組成,Android是Google開發(fā)的基于Linux平臺的開源手機(jī)操作系統(tǒng)。它包括操統(tǒng),用戶界面和應(yīng)用程序移動電話工作所需的全部軟

17、件,而且不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙,谷歌與開放手機(jī)聯(lián)盟合作開發(fā)了Android,這個聯(lián)盟由包括中國移動,摩托羅拉,高通,宏達(dá)在內(nèi)的30多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。通過與運營商,設(shè)備制造商,開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化,開放式的移動電話軟件平臺,在移動產(chǎn)業(yè)內(nèi)形成一個開放式生態(tài)系統(tǒng)。2.1.1 Android系統(tǒng)的特點1.開放性。Google與開放性手機(jī)聯(lián)盟合作開發(fā)了android,Google通過與運營商,設(shè)備制造商,開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化,開放式的移動電話軟件平臺,在移動產(chǎn)業(yè)內(nèi)形成一個開放式生態(tài)

18、系統(tǒng)。2.應(yīng)用程序無界限。Android上的應(yīng)用可以通過標(biāo)準(zhǔn)API訪問核心移動設(shè)備功能。通過互聯(lián)網(wǎng),應(yīng)用程序可以聲明它們的功能可提供其它應(yīng)用程序使用。3.應(yīng)用程序是在平等的條件下創(chuàng)建的,移動設(shè)備上的應(yīng)用程序可以被替換或擴(kuò)展,即使是撥號或主屏幕這樣的核心組件。4.應(yīng)用程序可以輕松地嵌入網(wǎng)絡(luò)。應(yīng)用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過Web view顯示內(nèi)容。5.應(yīng)用程序可以并行運行。Android是一種完整的多任務(wù)環(huán)境,應(yīng)用程序可以在其中并行運行,在后臺運行時,應(yīng)用程序可以生成通知引起注意。2.1.2 Android的功能1.支持虛擬鍵盤。虛擬鍵盤的出現(xiàn)意味著基于A

19、ndroid1.5或以上的版本的移動設(shè)備可以同時支持物理鍵盤和虛擬鍵盤。2.使用widget實現(xiàn)桌面的個性化??梢杂脀idget修飾自己的桌面。大多數(shù)小的Web應(yīng)用都是從網(wǎng)絡(luò)上獲得實時數(shù)據(jù)并展示給用戶的,android預(yù)裝了Widget,包括數(shù)字時鐘,日歷,音樂播放器,相框。3.用在線文件快速瀏覽數(shù)數(shù),類似于OSX Leopard的Quick look特征,Android的在線文件夾可顯示的數(shù)據(jù)條目,比如聯(lián)系人,喜歡的應(yīng)用,E-mail信息,播放列表,書簽,RSS源等,并不需要運行系統(tǒng)程序處理特定的數(shù)據(jù)條目。4.視頻錄制和分享。Android還有錄制和分享視頻的功能,對回放和MPEG-4,3G

20、P等視頻也有了更好的支持??梢酝ㄟ^E-mail,MMS或直接上傳等方式來分享視頻。5.更快,更兼容的瀏覽器,Android的基于WebKit內(nèi)核的瀏覽器帶來了重要的調(diào)速半置,這得益于新的WebKit渲染引擎和優(yōu)化的JAVA腳本編譯器。6.Voice search語音搜索。帶有語音識別技術(shù)的Google手機(jī)已于2008年11月面世,它支持語音搜索功能,該功能增強(qiáng)了默認(rèn)的搜索能力,已超過了純文本搜索。7.立體藍(lán)牙和免提電話。除了增強(qiáng)的免提電話體驗,Android還支持立體藍(lán)牙(A2Dphe和AVCRP),并有自動配對功能。8.強(qiáng)大的GPS技術(shù).Android內(nèi)部提供了大量的GPS組件,我們可以很輕

21、松地獲得設(shè)備當(dāng)前的位置等信息,讓導(dǎo)航等功能更加完善。9.Android系統(tǒng)硬件檢測,android可自動檢測和修復(fù)SD卡的文件系統(tǒng),允許第三方應(yīng)用顯示Android系統(tǒng)的硬件特征,為了讓用戶下載到與自己的設(shè)備匹配的應(yīng)用,我們可以檢測用戶設(shè)備的硬件信息,讓滿足應(yīng)用要求的設(shè)備安裝該程序。2.2 Google android移動平臺開發(fā)過程研究Android移動平臺作為21世紀(jì)的新秀,受到了越來越多的開發(fā)者的鐘愛,在這股開發(fā)的浪潮中,逐漸形成了具有Android一套具有Android特色的開發(fā)流程。由于Android的優(yōu)越性,其開發(fā)顯得非常的有規(guī)律可尋。大致的開發(fā)流程如下:需求分析:作為一個軟件,它

22、必須有其存在的意義和價值,而這個價值和意義就需要靠需求分析來確定。功能分析。作為一個手機(jī)軟件,它的使命就是給用戶使用的。如何提供用戶最好的用戶體驗就值得每一個程序員的深思,這也是確保一個程序成功的關(guān)鍵所在。界面設(shè)計:作為一個手機(jī)軟件,其只能在極有限的區(qū)域中顯示,如何在有限的空間里更完美的展現(xiàn)出自己的獨特之處就顯得更為重要了。測試:在任何一個軟件開發(fā)行業(yè)中,無論是J2EE,J2SE,J2ME等等其他開發(fā)中,測試時必不可少的一環(huán),在Android開發(fā)中,由于手機(jī)的高頻率使用,和硬件系統(tǒng)上的不足,使得對軟件的要求更加的嚴(yán)格,這就要求在開發(fā)完成后,再對其進(jìn)行嚴(yán)格的測試,而測試又包括了:單元測試,系統(tǒng)測

23、試等方面的測試。系統(tǒng)開發(fā):作為一個軟件的主體部分,系統(tǒng)開發(fā)的好壞直接決定了該系統(tǒng)的性能和壽命。發(fā)布:在完成一個系統(tǒng)的開發(fā)后,就要對其發(fā)布,經(jīng)過廣大用戶的考驗,只有經(jīng)過這個過程,才算是一個合格的產(chǎn)品,在Android平臺中,Google提供了完整的發(fā)布機(jī)制Google market。2.3 Google android移動平臺下的應(yīng)用研究Android系統(tǒng)提供給應(yīng)用開發(fā)者本身就是一個框架,所有的應(yīng)用開發(fā)都必須遵守這個框架原則。我們在開發(fā)應(yīng)用時就是在這個框架上進(jìn)行擴(kuò)展,下面來看看android這個框架都有些什么功能可供我們使用。Android.app:提供高層的程序模型和基本的運行環(huán)境Androi

24、d.content:包含對各種設(shè)備上的數(shù)據(jù)進(jìn)行訪問和發(fā)布Android.database:通過內(nèi)容提供者瀏覽的操作數(shù)據(jù)庫Android.graphics:圖形庫,包含畫布,顏色過濾,點,矩形,可以將它們直接繪制到屏幕上。Android.location:定位和相關(guān)服務(wù)的類A: 提供幫助網(wǎng)絡(luò)訪問類,超過通常的*接口。Android.media: 提供一些類管理多種音頻,視頻的媒體接口。Android.os:提供了系統(tǒng)服務(wù),消息轉(zhuǎn)輸和IPC機(jī)制。Android.opngl:提供OpenGL的工具。Avider:提供訪問Android的內(nèi)容提供者的類。Android.telephony:提供與撥打電

25、話相關(guān)的API交互。Android.view提供基礎(chǔ)的用戶界面接口框架。Android.util:涉及工具性的方法,例如時間日期的操作。Addroid.webkit:默認(rèn)瀏覽器操作接口。Android.widget包含各種UI元素在應(yīng)用程序的布局中使用。2.4 小結(jié)本章主要通過三個方面:1.Google android移動平臺的概述:2. Google android移動平臺開發(fā)過程的研究:3. Google android移動平臺下的應(yīng)用研究,概要的介紹了Google android移動平臺相關(guān)知識,對Google android移動平臺有初步的認(rèn)識和了解,為后面的開發(fā)做了堅實的基礎(chǔ)。3.

26、項目設(shè)計3.1 項目總體設(shè)計本軟件是一個App Widget應(yīng)用程序,啟動程序后可以進(jìn)行城市的設(shè)置,可以通過圖片和文字顯示當(dāng)前和未來兩天的天氣狀況,包括溫度、風(fēng)向和雨雪情況等。該軟件的基本功能需求有:1歡迎界面系統(tǒng)啟動時首先進(jìn)入歡迎界面;2啟動App Widget應(yīng)用程序為了方便用戶實時了解天氣狀況,特別添加在Android系統(tǒng)桌面上顯示當(dāng)前天氣與時間的天氣小部件,使用戶拿起手機(jī)的第一時刻就能了解天氣,同時當(dāng)用戶單擊小部件時,自動跳轉(zhuǎn)至天氣顯示界面,顯示三天內(nèi)的詳細(xì)天氣。3設(shè)置所在城市界面通過可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫中預(yù)存的城市來進(jìn)行設(shè)置,同時為了方便用戶查找,支持以輸入框的形式來過

27、濾查詢預(yù)報城市。當(dāng)單擊選中城市時跳轉(zhuǎn)至天氣顯示界面,來顯示該城市當(dāng)三天內(nèi)的天氣狀況;第一次運行時自動跳到該界面。4顯示天氣界面顯示指定城市三天內(nèi)的天氣狀況,包括日期、城市名稱、溫度、風(fēng)力與當(dāng)日的建議,用戶可通過按菜單鍵來顯示菜單更新當(dāng)前天氣與設(shè)置天氣顯示的界面背景,以及跳轉(zhuǎn)至設(shè)置預(yù)報城市界面來更換預(yù)報城市。3.2 系統(tǒng)功能界面3.2.1 歡迎界面 當(dāng)系統(tǒng)啟動時,首先會顯示歡迎界面。如圖3-1所示:圖3-1 歡迎界面3.2.2 設(shè)置所在城市界面1當(dāng)?shù)谝淮芜\行程序時,跳轉(zhuǎn)至城市設(shè)置界面進(jìn)行預(yù)報城市的選擇,如圖3-2所示:圖3-2 設(shè)置城市2 用戶可通過輸入框過濾查詢當(dāng)前系統(tǒng)中預(yù)存的城市,如圖3-3

28、所示:圖3-3 過濾框輸入選擇城市3.2.3 天氣顯示界面1選擇了預(yù)報城市后,系統(tǒng)跳轉(zhuǎn)至天氣顯示界面,顯示該城市三天內(nèi)的實時天氣, 如圖3-4所示: 圖3-4 顯示天氣2 在天氣界面中用戶可通過按菜單鍵來調(diào)出菜單,設(shè)置城市,更新天氣與更換背景,如圖3-5所示:圖3-5 調(diào)出菜單3.2.4 Widget桌面小部件界面方便用戶第一時間了解天氣動態(tài),添加widget顯示功能界面,如圖3-6所示: 圖3-6 Widget桌面小部件3.3 設(shè)計目標(biāo)設(shè)計完成一個實用穩(wěn)定的天氣預(yù)報系統(tǒng),同時要廉價使其能滿足大部分用戶的需求,因此針對上述要求,本設(shè)計應(yīng)滿足:1系統(tǒng)能及時的反饋指定預(yù)報城市的天氣情況;2. 可設(shè)

29、置所在城市,自行輸入或者列表選擇城市;3節(jié)省流量開銷,規(guī)定在指定的時間間隔內(nèi)才更新天氣,其它時段顯示緩存的天氣;4操作方便快捷,使用簡單,界面設(shè)計美觀大方,支持widget。4. 系統(tǒng)設(shè)計4.1 開發(fā)及運行環(huán)境1. JDK1.6.0 _102. Eclipse3.83. Android Development Toolkit (ADT) 21.0.1 4. Android 2.2及以上 5. Windows 7 4.2 數(shù)據(jù)庫設(shè)計由于在本系統(tǒng)中是通過訪問中央氣象臺提供的天氣信息得到的天氣預(yù)報,在查詢指定城市的天氣時,需要用到它提供的城市碼,而城市碼相對穩(wěn)定不變,所以在構(gòu)建系統(tǒng)時將其事先通過An

30、droid的網(wǎng)絡(luò)訪問技術(shù)將其緩沖到本地SQLite數(shù)據(jù)庫進(jìn)行保存起來,方便以后的查詢,同時節(jié)省了流量開銷。綜上所述在本地建立db_weather.db的數(shù)據(jù)庫,其中只存在兩個表: provinces和citys。citys表中存在city_num用天氣的查詢,同時還存在外鍵province_id與provinces表形成1對n的關(guān)系。結(jié)構(gòu)如圖4-1所示:圖4-1 數(shù)據(jù)庫表結(jié)構(gòu)4.3 主要方法及步驟1. 搭建Android開發(fā)環(huán)境,并建立名為WeatherForecastSystem項目。2. 在程序第一次運行時,將db_weather.db數(shù)據(jù)庫文件導(dǎo)入到應(yīng)用程序數(shù)據(jù)庫中。3. 建立設(shè)置城市界

31、面,讀取數(shù)據(jù)庫文件,獲取省份,城市以及對應(yīng)的城市碼。4. 接收用戶選擇的城市碼,訪問:/data/.html得到天氣信息。5. 解析天氣信息,將城市碼及天氣信息緩沖下來,并為其設(shè)置有效時間,方便下次啟動時直接得到天氣信息,過期則從網(wǎng)上更新。6. 定時由保存的城市碼更新天氣信息。4.4 主要方法及技術(shù)1. Android手機(jī)的界面UI設(shè)計2. Android的網(wǎng)絡(luò)通信3. Android的廣播4. Widget小部件編程5. JSON解析6. SQLite數(shù)據(jù)庫操作7. Android文件操作5. 主要模塊5.1 項目框架在裝有ADT插件的Eclipse中新建一個名為WeatherForecas

32、tSystem的項目,項目主要文件結(jié)構(gòu)如圖5-1所示:圖5-1 WeatherForecastSystem工程的源代碼文件結(jié)構(gòu)為了使源代碼文件的結(jié)構(gòu)更加清晰,WeatherForecastSystem工程設(shè)置了多個命名空間,分別用來保存用戶界面、數(shù)據(jù)庫、后臺服務(wù)和工具實體的源代碼文件。源代碼文件的名稱以及說明如表5-1所示。表5-1 WeatherForecastSystem工程的文件用途說明包 名 稱文 件 名說 明com.weather.appMainActivity.java“天氣顯示頁面”的Activitycom.weather.appWelcomeActivity.java“歡迎頁面

33、”的Activitycom.weather.appSetCityActivity.java“設(shè)置城市頁面”的Activitycom.weather.appWeatherWidget.java桌面小部件com.weather.appUpdateWidgetService.java后臺更新服務(wù)com.weather.adapterMyListAdapter.java城市列表com.weather.daoDBHelper.java數(shù)據(jù)庫操作類com.weather.utilsWebAccessTools.java網(wǎng)絡(luò)訪問工具類5.2 主要功能實現(xiàn)5.2.1 導(dǎo)入db_weather.db數(shù)據(jù)庫文件p

34、ublic void importInitDatabase() /數(shù)據(jù)庫的目錄 String dirPath=/data/data/com.weather.app/databases; File dir = new File (dirPath); if (!dir.exists() dir.mkdir (); /數(shù)據(jù)庫文件 File dbfile = new File(dir, db_weather.db); try if(!dbfile.exists() dbfile.createNewFile(); /加載欲導(dǎo)入的數(shù)據(jù)庫 InputStream is= this.getApplicatio

35、nContext().getResources().openRawResource(R.raw.db_weather); FileOutputStream fos = new FileOutputStream(dbfile); byte buffere=new byteis.available(); is.read(buffere); fos.write(buffere); is.close(); fos.close(); catch(FileNotFoundException e) e.printStackTrace(); catch(IOException e) e.printStackT

36、race(); 5.2.2 實現(xiàn)城市列表的創(chuàng)建與過濾實現(xiàn)城市列表是通過繼承android.widget.BaseExpandableListAdapter適配器實現(xiàn)的,其中主要實現(xiàn)它的public View getGroupView()得到列表的一級列表和public void getChildView()得到列表的二級子列表實現(xiàn)的,在這里由于只是實現(xiàn)文本顯示功能,故用TextView組件來填充就行了,如果要構(gòu)造這個自定義的適配器,則只需在提供存放省份直轄市的一級列表的數(shù)組String groups和存放對應(yīng)的城鎮(zhèn)的二級列表的String childs就行了。Overridepublic Vi

37、ew getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) TextView textView = null;/這里判斷convertView是否為空if(convertView=null) /產(chǎn)生一個TextView組件textView = getGenericView();/設(shè)置它的文本內(nèi)容textView.setText(getChild(groupPosition,childPosition).toString(); else

38、textView = (TextView)convertView;textView.setText(getChild(groupPosition,childPosition).toString();return textView;Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) TextView textView = null;if(convertView=null)textView = getGenericView();textV

39、iew.setText(getGroup(groupPosition).toString();else textView = (TextView)convertView;textView.setText(getGroup(groupPosition).toString();return textView; private TextView getGenericView() AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 48);TextView text

40、View = new TextView(context);textView.setLayoutParams(lp);textView.setTextSize(18);textView.setTextColor(Color.WHITE);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(32, 0, 0, 0);return textView;同時為了兼具過濾功能,還需再實現(xiàn)android.widget.Filterable接口,這個接口有一個getFilter()返回Filter過濾器

41、的列表,故還要提供一個Filter過濾類,在本系統(tǒng)中,實現(xiàn)的是一個內(nèi)部類CityFilter,它繼承android.widget.Filter類,覆蓋實現(xiàn)了兩個方法,一個是performFiltering()得到FilterResults過濾結(jié)果對象方法,另一個是根據(jù)得到的FilterResults對象更新適配器的publishResults()方法。其中的performFiltering(CharSequence constraint)方法的實現(xiàn)是通過constraint這個關(guān)鍵字以省份直轄市為單位進(jìn)行匹配,如果匹配成功,則添加該省份以下的所有城市,如果匹配不成功,則再逐一與這個省份下的城市

42、匹配,則只添加匹配的城市,其中匹配的結(jié)果放在MapInteger,ArrayListvalues這樣的向量中,再由新建的FilterResults封裝返回,(具體實現(xiàn)如下):1. 首先是對關(guān)鍵字進(jìn)行判斷是否為空,如為空則由values添加所有省份與城市,其中的allGroups和allChilds保存的是所有的省份與對應(yīng)的城市:/當(dāng)過濾條件為空時,返回所有的省份與城市 if(constraint = null | constraint.length() = 0) for(int i=0; iallGroups.length; i+) ArrayList index = new ArrayLis

43、t(); /添加所有與之對應(yīng)的城市 for(int j=0; jallChildsi.length; j+) index.add(j); values.put(i, index); 2. 如果關(guān)鍵字constraint不為空,則以省份為單位進(jìn)行匹配,省份匹配的添加下面的所在城鎮(zhèn),如果不匹配,則進(jìn)一步深入匹配城鎮(zhèn),添加符合條件的城鎮(zhèn):String filterStr = constraint.toString(); for(int i=0; iallGroups.length; i+) /查找省名是否包含用戶輸入的字符串 if(allGroupsi.contains(filterStr) Arr

44、ayList index = new ArrayList(); /添加所有與之對應(yīng)的城市 for(int j=0; jallChildsi.length; j+) index.add(j); values.put(i, index); else ArrayList index = new ArrayList(); /如果省份名沒有,則查找它下面的城市名是否包含 for(int j=0; j 0) values.put(i, index); else index = null; 3. 得到過濾的結(jié)果后將其用FilterResource封裝后返回:FilterResults results = n

45、ew FilterResults(); results.values = values; results.count = values.size(); 另外的publishResults(CharSequence constraint,FilterResults results)方法就是根據(jù)上面得到的results對象來得到新的String groups與String Childs數(shù)組,再調(diào)用BaseExpandableListAdapter父類的notifyDataSetChanged()方法來更新列表,從而實現(xiàn)過濾后結(jié)果的顯示(具體實現(xiàn)如下):1. 首先將FiltersResult對象Ma

46、pInteger,ArrayListfilterResult,然后來判斷過濾后的結(jié)果長度是否為0,如果長度為0則說明過濾后的結(jié)果為空,則調(diào)用父類的notifyDataSetInvalidated()方法阻止列表更新。2. 如果長度不為0,則說明存在過濾結(jié)果,則將它轉(zhuǎn)換為groups數(shù)組與childs數(shù)組,并調(diào)用notifyDataSetChanged()方法實再更新:如上所述則就實現(xiàn)了帶有過濾性可伸展性列表適配性的實現(xiàn),則在使用時在XML組件配置文件中使用ExpandableListView列表,并調(diào)用它的setAdapter()方法來加載自定義的適配器。而在使用它的過濾功能時則調(diào)用自定義適配

47、器的getFilter()得到過濾Filter對象,再調(diào)用Filter對象的filter(String)方法實現(xiàn)的,在本系統(tǒng)中用觸發(fā)文本輸入框EditText的TextChangedListener事件調(diào)用從而實現(xiàn)手動選擇所在城市的過濾查詢。5.2.3 訪問網(wǎng)絡(luò)得到天氣信息接收用戶選擇的城市碼,訪問:/data/.html得到天氣信息。首先實現(xiàn)上述功能需使用Android的網(wǎng)絡(luò)訪問技術(shù),故編寫工具類WebAccessTools類如下:public class WebAccessTools private Context context;public WebAccessTools(Context

48、 context) this.context = context;public String getWebContent(String url) /創(chuàng)建一個http請求對象HttpGet request = new HttpGet(url);/創(chuàng)建HttpParams以用來設(shè)置HTTP參數(shù)HttpParams params=new BasicHttpParams();/設(shè)置連接超時或響應(yīng)超時HttpConnectionParams.setConnectionTimeout(params, 3000);HttpConnectionParams.setSoTimeout(params, 5000)

49、;/創(chuàng)建一個網(wǎng)絡(luò)訪問處理對象HttpClient httpClient = new DefaultHttpClient(params);try/執(zhí)行請求參數(shù)項HttpResponse response = httpClient.execute(request);/判斷是否請求成功if(response.getStatusLine().getStatusCode() = HttpStatus.SC_OK) /獲得響應(yīng)信息String content = EntityUtils.toString(response.getEntity();return content; else /網(wǎng)連接失敗,使用

50、Toast顯示提示信息Toast.makeText(context, 網(wǎng)絡(luò)訪問失敗,請檢查您機(jī)器的聯(lián)網(wǎng)設(shè)備!, Toast.LENGTH_LONG).show();catch(Exception e) e.printStackTrace(); finally /釋放網(wǎng)絡(luò)連接資源httpClient.getConnectionManager().shutdown();return null;5.2.4 Widget窗體小部件的更新由于widget中的時鐘關(guān)系,需要對widget顯示進(jìn)行時刻的更新用來保持與系統(tǒng)中時間的一致。實現(xiàn)這個功能需要用到AlarmManager類,這個類專門用來設(shè)定在某個指

51、定的時間去完成指定的事件。設(shè)計思路是在Widget的onUpdate方法中啟動一個自定義更新后臺服務(wù),更新widget,并設(shè)定下一分鐘再次調(diào)用此服務(wù)。具體實現(xiàn)過步驟如下:1. 首先自定義一個后臺運行服務(wù)類繼承至Service類,實現(xiàn)它的服務(wù)開始運行調(diào)用的onStart()方法:super.onStart(intent, startId); /得到widget的布局對象 RemoteViews views = WeatherWidget.getWeatherView(this); /得到AppWidgetManager widget管理器 AppWidgetManager appWidgetMa

52、nager=AppWidgetManager.getInstance(this); int appids=appWidgetManager.getAppWidgetIds(new ComponentName(this, WeatherWidget.class); /得到城市碼,并更新天氣 SharedPreferences sp=getSharedPreferences( SetCityActivity.CITY_CODE_FILE, SetCityActivity.MODE_PRIVATE); String cityCode= sp.getString(code, ); if(cityCod

53、e!=null&cityCode.trim().length() 0) WeatherWidget.updateAppWidget(views, this, appWidgetManager, cityCode); appWidgetManager.updateAppWidget(appids, views); /獲取當(dāng)前時間設(shè)置警報服務(wù) Date date = new Date(); long now =date.getTime(); long unit=60000;/間隔一分鐘 int s=date.getSeconds(); /得到秒數(shù) unit=60000-s*1000; /將時間精確

54、到秒 pintent=PendingIntent.getService(this, 0, intent, 0); /計時器 alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE); /AlarmManager.RTC_WAKEUP設(shè)置服務(wù)在系統(tǒng)休眠時同樣會運行 /第二個參數(shù)是下一次啟動service時間 alarm.set(AlarmManager.RTC_WAKEUP, now+unit, pintent); 2. 然后在實現(xiàn)AppWidgetProvider的widget類的onUpdate方法中啟動這個自定義的服務(wù):/啟動一個自定義更新widget的后臺服務(wù) context.startService(new Intent(context,UpdateWidgetService.class); 3. 除了啟動這個服務(wù)是不夠的,當(dāng)用戶刪除widget部件時,后臺服務(wù)也必須停止,這樣就必須實現(xiàn)Service類中的另一個方法onDestroy()方法,該方法在Service停止時調(diào)用,在這里用于取消AlarmManager設(shè)置的警報服務(wù):/當(dāng)widg

溫馨提示

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

最新文檔

評論

0/150

提交評論