




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、河北農(nóng)業(yè)大學(xué)畢業(yè)設(shè)計(jì)PAGE 河北農(nóng)業(yè)大學(xué) 本科畢業(yè)論文(設(shè)計(jì))題 目: 基于android系統(tǒng)的天氣預(yù)報(bào)查詢系統(tǒng) 學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 專業(yè)班級(jí): 計(jì)算機(jī)專升本1101班 學(xué) 學(xué)生姓名: 指導(dǎo)教師姓名: 指導(dǎo)教師職稱: 副教授 2013 年 6 月 1摘 要近幾年來隨著3G技術(shù)成熟和智能手機(jī)的不斷普及,移動(dòng)應(yīng)用的需求與日俱增,移動(dòng)應(yīng)用開發(fā)成為當(dāng)下最熱門的技術(shù)之一。在Google和Android手機(jī)聯(lián)盟的共同推動(dòng)下,Android在眾多移動(dòng)應(yīng)用開發(fā)平臺(tái)中脫穎而出。Android是一個(gè)真正意義上的開源智能手機(jī)操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動(dòng)設(shè)備廠商和開發(fā)者的熱捧,手機(jī)已被賦予了除
2、通話以外的其它許多功能。全新的手機(jī)軟件領(lǐng)域已逐漸聚焦了眾多軟件開發(fā)商的目光,軟件開發(fā)者和軟件用戶將共同面臨這個(gè)振奮人心的新境界。 本設(shè)計(jì)使用Android設(shè)計(jì)技術(shù)開發(fā)了一種運(yùn)用在Android系統(tǒng)上的手機(jī)天氣預(yù)報(bào)軟件系統(tǒng),本系統(tǒng)通過選擇城市來獲得天氣,風(fēng)向,溫度等信息。基于android的天氣預(yù)報(bào)系統(tǒng)軟件可以使用戶對(duì)于各地的天氣情況的實(shí)時(shí)掌握,極大的方便了用戶的出行和行程安排,避免了不必要的麻煩,具有很強(qiáng)的實(shí)用性。關(guān)鍵詞:天氣預(yù)報(bào)系統(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 項(xiàng)目需求分析 PAGEREF _Toc358327716 h 1 HYPERLINK
8、l _Toc358327717 2. Google android移動(dòng)平臺(tái)的相關(guān)理論 PAGEREF _Toc358327717 h 1 HYPERLINK l _Toc358327718 2.1 Google android 移動(dòng)平臺(tái)的概述 PAGEREF _Toc358327718 h 1 HYPERLINK l _Toc358327719 2.1.1 Android系統(tǒng)的特點(diǎn) PAGEREF _Toc358327719 h 2 HYPERLINK l _Toc358327720 2.1.2 Android的功能 PAGEREF _Toc358327720 h 2 HYPERLINK l
9、_Toc358327721 2.2 Google android移動(dòng)平臺(tái)開發(fā)過程研究 PAGEREF _Toc358327721 h 2 HYPERLINK l _Toc358327722 2.3 Google android移動(dòng)平臺(tái)下的應(yīng)用研究 PAGEREF _Toc358327722 h 3 HYPERLINK l _Toc358327723 2.4 小結(jié) PAGEREF _Toc358327723 h 3 HYPERLINK l _Toc358327724 3. 項(xiàng)目設(shè)計(jì) PAGEREF _Toc358327724 h 4 HYPERLINK l _Toc358327725 3.1 項(xiàng)
10、目總體設(shè)計(jì) 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è)計(jì)目標(biāo) PAGEREF _Toc358327731 h 8 HYPERLINK l _Toc358327732 4. 系統(tǒng)設(shè)計(jì) PAGEREF _Toc358327732 h 8 HYPERLINK l _Toc358327733 4.1 開發(fā)及運(yùn)行環(huán)境 PAGEREF _Toc358327733 h 8 HYPERLINK l _Toc358327734 4.2 數(shù)據(jù)庫設(shè)計(jì) 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 項(xiàng)目框架 PAGEREF _Toc358327738 h 9 HYPERLINK l _Toc358327739 5.2 主要功能實(shí)現(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 實(shí)現(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ù)報(bào)查詢系統(tǒng)1. 需求分析1.1 開發(fā)背景近幾年來隨著3G技術(shù)成熟和智能手機(jī)的不斷普及,移動(dòng)應(yīng)用的需求與日俱增,移動(dòng)應(yīng)用開發(fā)成為當(dāng)下最熱門的技術(shù)之一。手機(jī)是已經(jīng)成為了生活中不可少的通讀設(shè)備
15、,沒有手機(jī)有時(shí)會(huì)讓人覺得寸步難行,手機(jī)將脫離傳統(tǒng)的打電話,發(fā)短信等基本功能,而基于智能手機(jī)的處理能力和擴(kuò)展能力,基于3G網(wǎng)絡(luò)高速數(shù)據(jù)傳輸,越來越多的功能和業(yè)務(wù)將被開發(fā)出來并大規(guī)模的應(yīng)用。在Google和Android手機(jī)聯(lián)盟的共同推動(dòng)下,Android在眾多移動(dòng)應(yīng)用開發(fā)平臺(tái)中脫穎而出。Android是一個(gè)真正意義上的開源智能手機(jī)操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動(dòng)設(shè)備廠商和開發(fā)者的熱捧。為順應(yīng)潮流,本設(shè)計(jì)旨在搭載Android的移動(dòng)設(shè)備上運(yùn)行,實(shí)現(xiàn)天氣狀況的實(shí)時(shí)動(dòng)態(tài)更新與顯示,方便人們的出行與生活。1.2 系統(tǒng)研究內(nèi)容1. 界面的設(shè)計(jì)2. 代碼的設(shè)計(jì)3. 程序的測試4. 產(chǎn)品的發(fā)布1.3
16、項(xiàng)目需求分析根據(jù)功能的需求,分析此項(xiàng)目的主要功能應(yīng)具備以下幾點(diǎn):1. 精確查詢?nèi)珖鞯爻鞘形磥韼滋靸?nèi)的實(shí)時(shí)天氣狀況2. 系統(tǒng)要具有實(shí)用性,符合用戶查看信息習(xí)慣,界面設(shè)計(jì)優(yōu)美3. 系統(tǒng)要具有穩(wěn)定性,且在一定程度上節(jié)省流量的開銷2. Google android移動(dòng)平臺(tái)的相關(guān)理論2.1 Google android 移動(dòng)平臺(tái)的概述Android 是 Google公司于07年11月5日宣布的基于LINUX平臺(tái)開源手機(jī)操作系統(tǒng),該平臺(tái)由操作系統(tǒng),中間件,用戶界面和應(yīng)用軟件組成,Android是Google開發(fā)的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)。它包括操統(tǒng),用戶界面和應(yīng)用程序移動(dòng)電話工作所需的全部軟
17、件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙,谷歌與開放手機(jī)聯(lián)盟合作開發(fā)了Android,這個(gè)聯(lián)盟由包括中國移動(dòng),摩托羅拉,高通,宏達(dá)在內(nèi)的30多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。通過與運(yùn)營商,設(shè)備制造商,開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化,開放式的移動(dòng)電話軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開放式生態(tài)系統(tǒng)。2.1.1 Android系統(tǒng)的特點(diǎn)1.開放性。Google與開放性手機(jī)聯(lián)盟合作開發(fā)了android,Google通過與運(yùn)營商,設(shè)備制造商,開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化,開放式的移動(dòng)電話軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開放式生態(tài)
18、系統(tǒng)。2.應(yīng)用程序無界限。Android上的應(yīng)用可以通過標(biāo)準(zhǔn)API訪問核心移動(dòng)設(shè)備功能。通過互聯(lián)網(wǎng),應(yīng)用程序可以聲明它們的功能可提供其它應(yīng)用程序使用。3.應(yīng)用程序是在平等的條件下創(chuàng)建的,移動(dòng)設(shè)備上的應(yīng)用程序可以被替換或擴(kuò)展,即使是撥號(hào)或主屏幕這樣的核心組件。4.應(yīng)用程序可以輕松地嵌入網(wǎng)絡(luò)。應(yīng)用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過Web view顯示內(nèi)容。5.應(yīng)用程序可以并行運(yùn)行。Android是一種完整的多任務(wù)環(huán)境,應(yīng)用程序可以在其中并行運(yùn)行,在后臺(tái)運(yùn)行時(shí),應(yīng)用程序可以生成通知引起注意。2.1.2 Android的功能1.支持虛擬鍵盤。虛擬鍵盤的出現(xiàn)意味著基于A
19、ndroid1.5或以上的版本的移動(dòng)設(shè)備可以同時(shí)支持物理鍵盤和虛擬鍵盤。2.使用widget實(shí)現(xiàn)桌面的個(gè)性化。可以用widget修飾自己的桌面。大多數(shù)小的Web應(yīng)用都是從網(wǎng)絡(luò)上獲得實(shí)時(shí)數(shù)據(jù)并展示給用戶的,android預(yù)裝了Widget,包括數(shù)字時(shí)鐘,日歷,音樂播放器,相框。3.用在線文件快速瀏覽數(shù)數(shù),類似于OSX Leopard的Quick look特征,Android的在線文件夾可顯示的數(shù)據(jù)條目,比如聯(lián)系人,喜歡的應(yīng)用,E-mail信息,播放列表,書簽,RSS源等,并不需要運(yùn)行系統(tǒng)程序處理特定的數(shù)據(jù)條目。4.視頻錄制和分享。Android還有錄制和分享視頻的功能,對(duì)回放和MPEG-4,3G
20、P等視頻也有了更好的支持。可以通過E-mail,MMS或直接上傳等方式來分享視頻。5.更快,更兼容的瀏覽器,Android的基于WebKit內(nèi)核的瀏覽器帶來了重要的調(diào)速半置,這得益于新的WebKit渲染引擎和優(yōu)化的JAVA腳本編譯器。6.Voice search語音搜索。帶有語音識(shí)別技術(shù)的Google手機(jī)已于2008年11月面世,它支持語音搜索功能,該功能增強(qiáng)了默認(rèn)的搜索能力,已超過了純文本搜索。7.立體藍(lán)牙和免提電話。除了增強(qiáng)的免提電話體驗(yàn),Android還支持立體藍(lán)牙(A2Dphe和AVCRP),并有自動(dòng)配對(duì)功能。8.強(qiáng)大的GPS技術(shù).Android內(nèi)部提供了大量的GPS組件,我們可以很輕
21、松地獲得設(shè)備當(dāng)前的位置等信息,讓導(dǎo)航等功能更加完善。9.Android系統(tǒng)硬件檢測,android可自動(dòng)檢測和修復(fù)SD卡的文件系統(tǒng),允許第三方應(yīng)用顯示Android系統(tǒng)的硬件特征,為了讓用戶下載到與自己的設(shè)備匹配的應(yīng)用,我們可以檢測用戶設(shè)備的硬件信息,讓滿足應(yīng)用要求的設(shè)備安裝該程序。2.2 Google android移動(dòng)平臺(tái)開發(fā)過程研究Android移動(dòng)平臺(tái)作為21世紀(jì)的新秀,受到了越來越多的開發(fā)者的鐘愛,在這股開發(fā)的浪潮中,逐漸形成了具有Android一套具有Android特色的開發(fā)流程。由于Android的優(yōu)越性,其開發(fā)顯得非常的有規(guī)律可尋。大致的開發(fā)流程如下:需求分析:作為一個(gè)軟件,它
22、必須有其存在的意義和價(jià)值,而這個(gè)價(jià)值和意義就需要靠需求分析來確定。功能分析。作為一個(gè)手機(jī)軟件,它的使命就是給用戶使用的。如何提供用戶最好的用戶體驗(yàn)就值得每一個(gè)程序員的深思,這也是確保一個(gè)程序成功的關(guān)鍵所在。界面設(shè)計(jì):作為一個(gè)手機(jī)軟件,其只能在極有限的區(qū)域中顯示,如何在有限的空間里更完美的展現(xiàn)出自己的獨(dú)特之處就顯得更為重要了。測試:在任何一個(gè)軟件開發(fā)行業(yè)中,無論是J2EE,J2SE,J2ME等等其他開發(fā)中,測試時(shí)必不可少的一環(huán),在Android開發(fā)中,由于手機(jī)的高頻率使用,和硬件系統(tǒng)上的不足,使得對(duì)軟件的要求更加的嚴(yán)格,這就要求在開發(fā)完成后,再對(duì)其進(jìn)行嚴(yán)格的測試,而測試又包括了:單元測試,系統(tǒng)測
23、試等方面的測試。系統(tǒng)開發(fā):作為一個(gè)軟件的主體部分,系統(tǒng)開發(fā)的好壞直接決定了該系統(tǒng)的性能和壽命。發(fā)布:在完成一個(gè)系統(tǒng)的開發(fā)后,就要對(duì)其發(fā)布,經(jīng)過廣大用戶的考驗(yàn),只有經(jīng)過這個(gè)過程,才算是一個(gè)合格的產(chǎn)品,在Android平臺(tái)中,Google提供了完整的發(fā)布機(jī)制Google market。2.3 Google android移動(dòng)平臺(tái)下的應(yīng)用研究Android系統(tǒng)提供給應(yīng)用開發(fā)者本身就是一個(gè)框架,所有的應(yīng)用開發(fā)都必須遵守這個(gè)框架原則。我們?cè)陂_發(fā)應(yīng)用時(shí)就是在這個(gè)框架上進(jìn)行擴(kuò)展,下面來看看android這個(gè)框架都有些什么功能可供我們使用。Android.app:提供高層的程序模型和基本的運(yùn)行環(huán)境Androi
24、d.content:包含對(duì)各種設(shè)備上的數(shù)據(jù)進(jìn)行訪問和發(fā)布Android.database:通過內(nèi)容提供者瀏覽的操作數(shù)據(jù)庫Android.graphics:圖形庫,包含畫布,顏色過濾,點(diǎn),矩形,可以將它們直接繪制到屏幕上。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:涉及工具性的方法,例如時(shí)間日期的操作。Addroid.webkit:默認(rèn)瀏覽器操作接口。Android.widget包含各種UI元素在應(yīng)用程序的布局中使用。2.4 小結(jié)本章主要通過三個(gè)方面:1.Google android移動(dòng)平臺(tái)的概述:2. Google android移動(dòng)平臺(tái)開發(fā)過程的研究:3. Google android移動(dòng)平臺(tái)下的應(yīng)用研究,概要的介紹了Google android移動(dòng)平臺(tái)相關(guān)知識(shí),對(duì)Google android移動(dòng)平臺(tái)有初步的認(rèn)識(shí)和了解,為后面的開發(fā)做了堅(jiān)實(shí)的基礎(chǔ)。3.
26、項(xiàng)目設(shè)計(jì)3.1 項(xiàng)目總體設(shè)計(jì)本軟件是一個(gè)App Widget應(yīng)用程序,啟動(dòng)程序后可以進(jìn)行城市的設(shè)置,可以通過圖片和文字顯示當(dāng)前和未來兩天的天氣狀況,包括溫度、風(fēng)向和雨雪情況等。該軟件的基本功能需求有:1歡迎界面系統(tǒng)啟動(dòng)時(shí)首先進(jìn)入歡迎界面;2啟動(dòng)App Widget應(yīng)用程序?yàn)榱朔奖阌脩魧?shí)時(shí)了解天氣狀況,特別添加在Android系統(tǒng)桌面上顯示當(dāng)前天氣與時(shí)間的天氣小部件,使用戶拿起手機(jī)的第一時(shí)刻就能了解天氣,同時(shí)當(dāng)用戶單擊小部件時(shí),自動(dòng)跳轉(zhuǎn)至天氣顯示界面,顯示三天內(nèi)的詳細(xì)天氣。3設(shè)置所在城市界面通過可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫中預(yù)存的城市來進(jìn)行設(shè)置,同時(shí)為了方便用戶查找,支持以輸入框的形式來過
27、濾查詢預(yù)報(bào)城市。當(dāng)單擊選中城市時(shí)跳轉(zhuǎn)至天氣顯示界面,來顯示該城市當(dāng)三天內(nèi)的天氣狀況;第一次運(yùn)行時(shí)自動(dòng)跳到該界面。4顯示天氣界面顯示指定城市三天內(nèi)的天氣狀況,包括日期、城市名稱、溫度、風(fēng)力與當(dāng)日的建議,用戶可通過按菜單鍵來顯示菜單更新當(dāng)前天氣與設(shè)置天氣顯示的界面背景,以及跳轉(zhuǎn)至設(shè)置預(yù)報(bào)城市界面來更換預(yù)報(bào)城市。3.2 系統(tǒng)功能界面3.2.1 歡迎界面 當(dāng)系統(tǒng)啟動(dòng)時(shí),首先會(huì)顯示歡迎界面。如圖3-1所示:圖3-1 歡迎界面3.2.2 設(shè)置所在城市界面1當(dāng)?shù)谝淮芜\(yùn)行程序時(shí),跳轉(zhuǎn)至城市設(shè)置界面進(jìn)行預(yù)報(bào)城市的選擇,如圖3-2所示:圖3-2 設(shè)置城市2 用戶可通過輸入框過濾查詢當(dāng)前系統(tǒng)中預(yù)存的城市,如圖3-3
28、所示:圖3-3 過濾框輸入選擇城市3.2.3 天氣顯示界面1選擇了預(yù)報(bào)城市后,系統(tǒng)跳轉(zhuǎn)至天氣顯示界面,顯示該城市三天內(nèi)的實(shí)時(shí)天氣, 如圖3-4所示: 圖3-4 顯示天氣2 在天氣界面中用戶可通過按菜單鍵來調(diào)出菜單,設(shè)置城市,更新天氣與更換背景,如圖3-5所示:圖3-5 調(diào)出菜單3.2.4 Widget桌面小部件界面方便用戶第一時(shí)間了解天氣動(dòng)態(tài),添加widget顯示功能界面,如圖3-6所示: 圖3-6 Widget桌面小部件3.3 設(shè)計(jì)目標(biāo)設(shè)計(jì)完成一個(gè)實(shí)用穩(wěn)定的天氣預(yù)報(bào)系統(tǒng),同時(shí)要廉價(jià)使其能滿足大部分用戶的需求,因此針對(duì)上述要求,本設(shè)計(jì)應(yīng)滿足:1系統(tǒng)能及時(shí)的反饋指定預(yù)報(bào)城市的天氣情況;2. 可設(shè)
29、置所在城市,自行輸入或者列表選擇城市;3節(jié)省流量開銷,規(guī)定在指定的時(shí)間間隔內(nèi)才更新天氣,其它時(shí)段顯示緩存的天氣;4操作方便快捷,使用簡單,界面設(shè)計(jì)美觀大方,支持widget。4. 系統(tǒng)設(shè)計(jì)4.1 開發(fā)及運(yùn)行環(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è)計(jì)由于在本系統(tǒng)中是通過訪問中央氣象臺(tái)提供的天氣信息得到的天氣預(yù)報(bào),在查詢指定城市的天氣時(shí),需要用到它提供的城市碼,而城市碼相對(duì)穩(wěn)定不變,所以在構(gòu)建系統(tǒng)時(shí)將其事先通過An
30、droid的網(wǎng)絡(luò)訪問技術(shù)將其緩沖到本地SQLite數(shù)據(jù)庫進(jìn)行保存起來,方便以后的查詢,同時(shí)節(jié)省了流量開銷。綜上所述在本地建立db_weather.db的數(shù)據(jù)庫,其中只存在兩個(gè)表: provinces和citys。citys表中存在city_num用天氣的查詢,同時(shí)還存在外鍵province_id與provinces表形成1對(duì)n的關(guān)系。結(jié)構(gòu)如圖4-1所示:圖4-1 數(shù)據(jù)庫表結(jié)構(gòu)4.3 主要方法及步驟1. 搭建Android開發(fā)環(huán)境,并建立名為WeatherForecastSystem項(xiàng)目。2. 在程序第一次運(yùn)行時(shí),將db_weather.db數(shù)據(jù)庫文件導(dǎo)入到應(yīng)用程序數(shù)據(jù)庫中。3. 建立設(shè)置城市界
31、面,讀取數(shù)據(jù)庫文件,獲取省份,城市以及對(duì)應(yīng)的城市碼。4. 接收用戶選擇的城市碼,訪問:/data/.html得到天氣信息。5. 解析天氣信息,將城市碼及天氣信息緩沖下來,并為其設(shè)置有效時(shí)間,方便下次啟動(dòng)時(shí)直接得到天氣信息,過期則從網(wǎng)上更新。6. 定時(shí)由保存的城市碼更新天氣信息。4.4 主要方法及技術(shù)1. Android手機(jī)的界面UI設(shè)計(jì)2. Android的網(wǎng)絡(luò)通信3. Android的廣播4. Widget小部件編程5. JSON解析6. SQLite數(shù)據(jù)庫操作7. Android文件操作5. 主要模塊5.1 項(xiàng)目框架在裝有ADT插件的Eclipse中新建一個(gè)名為WeatherForecas
32、tSystem的項(xiàng)目,項(xiàng)目主要文件結(jié)構(gòu)如圖5-1所示:圖5-1 WeatherForecastSystem工程的源代碼文件結(jié)構(gòu)為了使源代碼文件的結(jié)構(gòu)更加清晰,WeatherForecastSystem工程設(shè)置了多個(gè)命名空間,分別用來保存用戶界面、數(shù)據(jù)庫、后臺(tái)服務(wù)和工具實(shí)體的源代碼文件。源代碼文件的名稱以及說明如表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后臺(tái)更新服務(wù)com.weather.adapterMyListAdapter.java城市列表com.weather.daoDBHelper.java數(shù)據(jù)庫操作類com.weather.utilsWebAccessTools.java網(wǎng)絡(luò)訪問工具類5.2 主要功能實(shí)現(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 實(shí)現(xiàn)城市列表的創(chuàng)建與過濾實(shí)現(xiàn)城市列表是通過繼承android.widget.BaseExpandableListAdapter適配器實(shí)現(xiàn)的,其中主要實(shí)現(xiàn)它的public View getGroupView()得到列表的一級(jí)列表和public void getChildView()得到列表的二級(jí)子列表實(shí)現(xiàn)的,在這里由于只是實(shí)現(xiàn)文本顯示功能,故用TextView組件來填充就行了,如果要構(gòu)造這個(gè)自定義的適配器,則只需在提供存放省份直轄市的一級(jí)列表的數(shù)組String groups和存放對(duì)應(yīng)的城鎮(zhèn)的二級(jí)列表的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)生一個(gè)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;同時(shí)為了兼具過濾功能,還需再實(shí)現(xiàn)android.widget.Filterable接口,這個(gè)接口有一個(gè)getFilter()返回Filter過濾器
41、的列表,故還要提供一個(gè)Filter過濾類,在本系統(tǒng)中,實(shí)現(xiàn)的是一個(gè)內(nèi)部類CityFilter,它繼承android.widget.Filter類,覆蓋實(shí)現(xiàn)了兩個(gè)方法,一個(gè)是performFiltering()得到FilterResults過濾結(jié)果對(duì)象方法,另一個(gè)是根據(jù)得到的FilterResults對(duì)象更新適配器的publishResults()方法。其中的performFiltering(CharSequence constraint)方法的實(shí)現(xiàn)是通過constraint這個(gè)關(guān)鍵字以省份直轄市為單位進(jìn)行匹配,如果匹配成功,則添加該省份以下的所有城市,如果匹配不成功,則再逐一與這個(gè)省份下的城市
42、匹配,則只添加匹配的城市,其中匹配的結(jié)果放在MapInteger,ArrayListvalues這樣的向量中,再由新建的FilterResults封裝返回,(具體實(shí)現(xiàn)如下):1. 首先是對(duì)關(guān)鍵字進(jìn)行判斷是否為空,如為空則由values添加所有省份與城市,其中的allGroups和allChilds保存的是所有的省份與對(duì)應(yīng)的城市:/當(dāng)過濾條件為空時(shí),返回所有的省份與城市 if(constraint = null | constraint.length() = 0) for(int i=0; iallGroups.length; i+) ArrayList index = new ArrayLis
43、t(); /添加所有與之對(duì)應(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(); /添加所有與之對(duì)應(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對(duì)象來得到新的String groups與String Childs數(shù)組,再調(diào)用BaseExpandableListAdapter父類的notifyDataSetChanged()方法來更新列表,從而實(shí)現(xiàn)過濾后結(jié)果的顯示(具體實(shí)現(xiàn)如下):1. 首先將FiltersResult對(duì)象Ma
46、pInteger,ArrayListfilterResult,然后來判斷過濾后的結(jié)果長度是否為0,如果長度為0則說明過濾后的結(jié)果為空,則調(diào)用父類的notifyDataSetInvalidated()方法阻止列表更新。2. 如果長度不為0,則說明存在過濾結(jié)果,則將它轉(zhuǎn)換為groups數(shù)組與childs數(shù)組,并調(diào)用notifyDataSetChanged()方法實(shí)再更新:如上所述則就實(shí)現(xiàn)了帶有過濾性可伸展性列表適配性的實(shí)現(xiàn),則在使用時(shí)在XML組件配置文件中使用ExpandableListView列表,并調(diào)用它的setAdapter()方法來加載自定義的適配器。而在使用它的過濾功能時(shí)則調(diào)用自定義適配
47、器的getFilter()得到過濾Filter對(duì)象,再調(diào)用Filter對(duì)象的filter(String)方法實(shí)現(xiàn)的,在本系統(tǒng)中用觸發(fā)文本輸入框EditText的TextChangedListener事件調(diào)用從而實(shí)現(xiàn)手動(dòng)選擇所在城市的過濾查詢。5.2.3 訪問網(wǎng)絡(luò)得到天氣信息接收用戶選擇的城市碼,訪問:/data/.html得到天氣信息。首先實(shí)現(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)建一個(gè)http請(qǐng)求對(duì)象HttpGet request = new HttpGet(url);/創(chuàng)建HttpParams以用來設(shè)置HTTP參數(shù)HttpParams params=new BasicHttpParams();/設(shè)置連接超時(shí)或響應(yīng)超時(shí)HttpConnectionParams.setConnectionTimeout(params, 3000);HttpConnectionParams.setSoTimeout(params, 5000)
49、;/創(chuàng)建一個(gè)網(wǎng)絡(luò)訪問處理對(duì)象HttpClient httpClient = new DefaultHttpClient(params);try/執(zhí)行請(qǐng)求參數(shù)項(xiàng)HttpResponse response = httpClient.execute(request);/判斷是否請(qǐng)求成功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ò)訪問失敗,請(qǐng)檢查您機(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中的時(shí)鐘關(guān)系,需要對(duì)widget顯示進(jìn)行時(shí)刻的更新用來保持與系統(tǒng)中時(shí)間的一致。實(shí)現(xiàn)這個(gè)功能需要用到AlarmManager類,這個(gè)類專門用來設(shè)定在某個(gè)指
51、定的時(shí)間去完成指定的事件。設(shè)計(jì)思路是在Widget的onUpdate方法中啟動(dòng)一個(gè)自定義更新后臺(tái)服務(wù),更新widget,并設(shè)定下一分鐘再次調(diào)用此服務(wù)。具體實(shí)現(xiàn)過步驟如下:1. 首先自定義一個(gè)后臺(tái)運(yùn)行服務(wù)類繼承至Service類,實(shí)現(xiàn)它的服務(wù)開始運(yùn)行調(diào)用的onStart()方法:super.onStart(intent, startId); /得到widget的布局對(duì)象 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í)間設(shè)置警報(bào)服務(wù) Date date = new Date(); long now =date.getTime(); long unit=60000;/間隔一分鐘 int s=date.getSeconds(); /得到秒數(shù) unit=60000-s*1000; /將時(shí)間精確
54、到秒 pintent=PendingIntent.getService(this, 0, intent, 0); /計(jì)時(shí)器 alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE); /AlarmManager.RTC_WAKEUP設(shè)置服務(wù)在系統(tǒng)休眠時(shí)同樣會(huì)運(yùn)行 /第二個(gè)參數(shù)是下一次啟動(dòng)service時(shí)間 alarm.set(AlarmManager.RTC_WAKEUP, now+unit, pintent); 2. 然后在實(shí)現(xiàn)AppWidgetProvider的widget類的onUpdate方法中啟動(dòng)這個(gè)自定義的服務(wù):/啟動(dòng)一個(gè)自定義更新widget的后臺(tái)服務(wù) context.startService(new Intent(context,UpdateWidgetService.class); 3. 除了啟動(dòng)這個(gè)服務(wù)是不夠的,當(dāng)用戶刪除widget部件時(shí),后臺(tái)服務(wù)也必須停止,這樣就必須實(shí)現(xiàn)Service類中的另一個(gè)方法onDestroy()方法,該方法在Service停止時(shí)調(diào)用,在這里用于取消AlarmManager設(shè)置的警報(bào)服務(wù):/當(dāng)widg
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年山東省土地集團(tuán)有限公司權(quán)屬公司招聘44人筆試參考題庫附帶答案詳解
- 山西省大同一中等重點(diǎn)中學(xué)2025年高三測試(四)數(shù)學(xué)試題
- 2024年下半年廣西現(xiàn)代物流集團(tuán)社會(huì)招聘校園公開招聘109人筆試參考題庫附帶答案詳解
- 縣區(qū)防汛培訓(xùn)課件
- 買賣房屋補(bǔ)充協(xié)議書
- 物流管理自我介紹
- 書畫家作品代理合同
- 行政事業(yè)單位內(nèi)部控制規(guī)范
- 運(yùn)輸業(yè)務(wù)委托合同二零二五年
- 二零二五離婚買房協(xié)議書
- 低壓綜合配電箱二次配線工藝守則
- 浙江省紹興市2023年中考英語真題(附答案)
- 龍虎斗(2017廣東廣州中考記敘文閱讀試題含答案)
- 地下鐵道-中南大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 廢品站勞務(wù)合同范本
- 安全生產(chǎn)管理規(guī)章制度評(píng)審記錄
- 教科版五年級(jí)科學(xué)下冊(cè)全套測試卷
- 建設(shè)工程工程量清單及清單計(jì)價(jià)2013
- 經(jīng)顱多普勒超聲在腦血管疾病中的應(yīng)用及臨床價(jià)值研究
- 云南省體育專業(yè)高考部分項(xiàng)目評(píng)分標(biāo)準(zhǔn)
- 高盛Marquee平臺(tái)深度研究報(bào)告
評(píng)論
0/150
提交評(píng)論