基于Android平臺(tái)的天氣預(yù)報(bào)軟件設(shè)計(jì)說明_第1頁
基于Android平臺(tái)的天氣預(yù)報(bào)軟件設(shè)計(jì)說明_第2頁
基于Android平臺(tái)的天氣預(yù)報(bào)軟件設(shè)計(jì)說明_第3頁
基于Android平臺(tái)的天氣預(yù)報(bào)軟件設(shè)計(jì)說明_第4頁
基于Android平臺(tái)的天氣預(yù)報(bào)軟件設(shè)計(jì)說明_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 PAGE38 / NUMPAGES43 教學(xué)單位學(xué)生學(xué)號(hào)下載后需要源程序請(qǐng)聯(lián)系我, HYPERLINK mailto:lion_hbeu163 lion_hbeu163.。本科畢業(yè)論文(設(shè)計(jì))題目基于Android平臺(tái)的天氣預(yù)報(bào)軟件設(shè)計(jì) 學(xué)生lion 專業(yè)名稱指導(dǎo)教師2013年5月20日基于Android平臺(tái)的天氣預(yù)報(bào)軟件設(shè)計(jì)摘要:Google于2008年推出了一款名為Android的開源智能手機(jī)操作系統(tǒng),它采用Linux核,開放手機(jī)聯(lián)盟(OHA)成員可以任意使用和修改SDK包,系統(tǒng)的開源性使其具有良好的拓展性。Android的最大特點(diǎn)是其開放性體系架構(gòu),不僅具有非常好的開發(fā)、調(diào)試環(huán)境,而且

2、還支持各種可擴(kuò)展的用戶體驗(yàn)。因此,對(duì)于軟件從業(yè)人員來說,Android平臺(tái)具有無限的吸引力。目前Android操作系統(tǒng)已經(jīng)成為用戶最多的智能操作系統(tǒng)。本天氣預(yù)報(bào)軟件的設(shè)計(jì),為Android終端用戶提供一款方便的實(shí)時(shí)天氣預(yù)報(bào)查詢軟件,為用戶帶來良好的用戶體驗(yàn)與便利的對(duì)天氣情況進(jìn)行掌控。本天氣預(yù)報(bào)軟件采用ViewFlipper組件,提供友好的界面滑動(dòng)切換方式,同時(shí)減少系統(tǒng)運(yùn)行時(shí)占用的空間。使用Files方式保存天氣信息,Shared Preferences保存用戶偏好設(shè)置,節(jié)約了文件存儲(chǔ)的空間。本文就在分析討論Android手機(jī)軟件開發(fā)技術(shù)原理的基礎(chǔ)上,利用Android中基本組件和常用設(shè)計(jì)模式,

3、開發(fā)出能為用戶提供更好的基于Android平臺(tái)的手機(jī)天氣預(yù)報(bào)軟件。關(guān)鍵字:Android;天氣預(yù)報(bào);智能手機(jī)平臺(tái)Design of weather forecast software Based on the AndroidAbstract:Google in 2008 launched a product called the Android open source smartphone operating system, which uses the Linux kernel, Open Handset Alliance (OHA) members can be free to use a

4、nd modify the SDK package, open source, it has good scalability of the system. The most important feature of Android is its open architecture, not only has a very good development and debugging environment, but also supports a variety of scalable user experience. Therefore, for software professional

5、s, the Android platform has unlimited appeal. Android operating system has become the user the most intelligent operating system.The weather software designed for the Android end users to provide a convenient, real-time weather query software, to provide users with a good user experience and conveni

6、ence of control of the weather conditions. The weather forecast software the ViewFlipper components, friendly interface sliding switch, while reducing the space occupied when the system is running. Files saved Weather Information, Shared Preferences to save user preferences settings, save the file s

7、torage space. This article on the basis of analysis and discussion of the Android mobile phone software development technical principles, using the basic components and common design patterns Android, developers can provide users with better mobile phone weather forecast software based on the Androi

8、d platform.Keywords:Android; HYPERLINK app:ds:weather t weather HYPERLINK app:ds:forecast t forecast;smart phone platform目 錄 TOC o 1-3 h z u HYPERLINK l _Toc345586463 1系統(tǒng)概述 PAGEREF _Toc345586463 h 1HYPERLINK l _Toc34558646411 研究容 PAGEREF _Toc345586464 h 1HYPERLINK l _Toc34558646512 研究意義 PAGEREF _Toc

9、345586465 h 1HYPERLINK l _Toc34558646613 研究現(xiàn)狀和發(fā)展趨勢(shì) PAGEREF _Toc345586466 h 1HYPERLINK l _Toc3455864672系統(tǒng)分析 PAGEREF _Toc345586467 h 4HYPERLINK l _Toc3455864682.1 研究目標(biāo) PAGEREF _Toc345586468 h 4HYPERLINK l _Toc3455864692.2 需求分析 PAGEREF _Toc345586469 h 4HYPERLINK l _Toc3455864702.3 性能分析 PAGEREF _Toc3455

10、86470 h 4HYPERLINK l _Toc3455864713程序設(shè)計(jì) PAGEREF _Toc345586471 h 6HYPERLINK l _Toc3455864723.1 用戶界面設(shè)計(jì) PAGEREF _Toc345586472 h 6HYPERLINK l _Toc3455864733.2 程序模塊設(shè)計(jì) PAGEREF _Toc345586473 h 9HYPERLINK l _Toc3455864744程序開發(fā) PAGEREF _Toc345586474 h 10HYPERLINK l _Toc3455864754.1 文件結(jié)構(gòu)與用途 PAGEREF _Toc3455864

11、75 h 10HYPERLINK l _Toc3455864764.2 數(shù)據(jù)存儲(chǔ) PAGEREF _Toc345586476 h 13HYPERLINK l _Toc3455864774.2.1 Shared Preferences PAGEREF _Toc345586477 h 13HYPERLINK l _Toc3455864784.2.2 Files PAGEREF _Toc345586478 h 14HYPERLINK l _Toc3455864794.3 主要功能代碼 PAGEREF _Toc345586479 h 18HYPERLINK l _Toc3455864804.3.1 獲

12、取天氣數(shù)據(jù) PAGEREF _Toc345586480 h 18HYPERLINK l _Toc3455864814.3.2 網(wǎng)絡(luò)檢查 PAGEREF _Toc345586481 h 20HYPERLINK l _Toc3455864824.3.3 定時(shí)更新時(shí)間 PAGEREF _Toc345586482 h 21HYPERLINK l _Toc3455864834.3.4 ViewFlipper手勢(shì)監(jiān)聽 PAGEREF _Toc345586483 h 21HYPERLINK l _Toc3455864844.3.5 城市管理中城市點(diǎn)擊事件 PAGEREF _Toc345586484 h 23

13、HYPERLINK l _Toc3455864854.4 主要界面結(jié)構(gòu)布局代碼 PAGEREF _Toc345586485 h 24HYPERLINK l _Toc3455864864.4.1 ViewFlipper框架結(jié)構(gòu) PAGEREF _Toc345586486 h 25HYPERLINK l _Toc3455864874.4.2 城市管理界面 PAGEREF _Toc345586487 h 25HYPERLINK l _Toc3455864884.4.3 生活指數(shù) PAGEREF _Toc345586488 h 26HYPERLINK l _Toc3455864894.4.4 城市簡(jiǎn)介

14、 PAGEREF _Toc345586489 h 27HYPERLINK l _Toc3455864905系統(tǒng)測(cè)試 PAGEREF _Toc345586490 h 29HYPERLINK l _Toc345586491總結(jié) PAGEREF _Toc345586491 h 36HYPERLINK l _Toc345586492參考文獻(xiàn) PAGEREF _Toc345586492 h 37HYPERLINK l _Toc345586493致 PAGEREF _Toc345586493 h 381系統(tǒng)概述11 研究容Android平臺(tái)手機(jī)天氣預(yù)報(bào)軟件是基于Android手機(jī)平臺(tái),運(yùn)用Java語言,應(yīng)

15、用 HYPERLINK :/ webxml .cn/ Receiver、Content Provider這四大組件與Android平臺(tái)的程序運(yùn)行機(jī)制,開發(fā)出針對(duì)使用Android平臺(tái)的手機(jī)天氣預(yù)報(bào)系統(tǒng)。12 研究意義Android平臺(tái)手機(jī)天氣預(yù)報(bào)軟件的開發(fā)可以進(jìn)一步擴(kuò)大氣象信息的覆蓋面,讓廣大公眾能夠在第一時(shí)間方便快捷地獲取最新的氣象預(yù)報(bào)(預(yù)警)信息,以便提前預(yù)防,把氣象災(zāi)害造成的損失降到最低。同時(shí)也可以強(qiáng)化氣象公共服務(wù)的職能,完善公共服務(wù)體系、改善公共服務(wù)手段、增加公共服務(wù)產(chǎn)品、提高公共服務(wù)質(zhì)量,更好地發(fā)揮了氣象事業(yè)對(duì)經(jīng)濟(jì)社會(huì)發(fā)展的現(xiàn)實(shí)性作用。13研究現(xiàn)狀和發(fā)展趨勢(shì)據(jù)百度數(shù)據(jù)研究中心2012

16、年Q3手機(jī)操作系統(tǒng)與應(yīng)用分析數(shù)據(jù)顯示,隨著智能手機(jī)的發(fā)展,操作系統(tǒng)越來越受到網(wǎng)民的關(guān)注。在剛剛過去的Q3,HYPERLINK :/ 199it /archives/tag/android o Google Android,Android手機(jī)系統(tǒng) t _blankAndroid和HYPERLINK :/ 199it /archives/tag/ios o 查看 iOS 中的全部文章 t _blankiOS繼續(xù)蠶食HYPERLINK :/ 199it /archives/tag/symbian o 查看 Symbian 中的全部文章 t _blankSymbian的份額,其中HYPERLINK :

17、/ 199it /archives/tag/android o Google Android,Android手機(jī)系統(tǒng) t _blankAndroid更是以接近55%的關(guān)注度進(jìn)一步鞏固其第一的位置。圖1 手機(jī)操作系統(tǒng)關(guān)注度變化趨勢(shì)圖安卓是首款開源代碼的操作系統(tǒng),采用Linux核,開放手機(jī)聯(lián)盟(OHA)成員可以任意使用和修改安卓的SDK軟件包。系統(tǒng)的開源性使其具有良好的拓展性,一方面,為眾多移動(dòng)應(yīng)用開發(fā)者提供了良好的系統(tǒng)性平臺(tái),有利于移動(dòng)應(yīng)用的集合;另一方面,終端廠商可以針對(duì)自身的特殊需要“定制化開發(fā)”。與此相比,盡管2010年2月,塞班基本完成開源工作,但由于代碼臃腫,用戶界面設(shè)計(jì)缺失,塞班的開

18、源并無實(shí)際意義,錯(cuò)失發(fā)展良機(jī)。Android操作系統(tǒng)給予了用戶跟高的自由度熟悉Android的都清楚用戶可以根據(jù)自己的喜好來設(shè)置手機(jī)界面,Android的應(yīng)用市場(chǎng)甚至上還有各式各樣的啟動(dòng)器來供用戶自己選擇,讓自己的手機(jī)與眾不同。例如用戶要是喜歡HTC的操作界面便馬上可以在應(yīng)用市場(chǎng)上找到,甚至還能模仿IOS的界面。相比于IOS操作系統(tǒng),Iphone手機(jī)只有一成不變的手機(jī)界面,不能對(duì)其進(jìn)行更改。我們認(rèn)為,安卓在全球市場(chǎng)的成長壯大,塞班市場(chǎng)份額不斷下跌已成不爭(zhēng)事實(shí)。安卓操作系統(tǒng)發(fā)展迅猛主要得益于免費(fèi)、開源和良好產(chǎn)業(yè)運(yùn)作策略,這三點(diǎn)為安卓在智能手機(jī)市場(chǎng)贏得更多的發(fā)展機(jī)遇。系統(tǒng)的免費(fèi)讓更多的廠商加入,推

19、動(dòng)了份額的上升;代碼的開源讓更多的開發(fā)者進(jìn)入應(yīng)用開發(fā);應(yīng)用的豐富吸引了更多用戶選擇,這也是谷歌值得眾多廠商學(xué)習(xí)的地方。此外,谷歌通過OHA聯(lián)合眾多廠商進(jìn)行系統(tǒng)研發(fā),不斷更新版本,目前以推出十多個(gè)Android版本,將系統(tǒng)應(yīng)用推廣到更多的終端產(chǎn)品中,確保用戶體驗(yàn)持續(xù)改善。2系統(tǒng)分析2.1 研究目標(biāo)(1) 了解Android應(yīng)用程序的設(shè)計(jì)和開發(fā)過程;(2) 使用多種組件進(jìn)行Android 平臺(tái)手機(jī)天氣預(yù)報(bào)軟件的開發(fā)。本軟件是基于Eclipse的開發(fā)環(huán)境,依托webService服務(wù)氣象數(shù)據(jù)建立氣象信息,開發(fā)出了針對(duì)Android平臺(tái)的手機(jī)天氣預(yù)報(bào)系統(tǒng)。2.2 需求分析本程序主界面采用ViewFli

20、pper視圖,實(shí)現(xiàn)Android界面滑動(dòng)效果,主界面分為四個(gè)一面,第一頁顯示用戶選定的首要城市的當(dāng)天天氣詳細(xì)情況,以與未來三天天氣的概況,并提供手動(dòng)更新天氣的按鈕;第二頁是城市設(shè)置頁面,用戶可以在設(shè)定最多9個(gè)城市作為用戶關(guān)注的城市,并提供當(dāng)天天氣概覽,用戶可以在這里設(shè)定選擇已經(jīng)關(guān)注的城市作為首要關(guān)注城市;第三頁是用戶選定的首要城市天氣情況的各種生活指數(shù),包括晾曬指數(shù)、旅游指數(shù)、路況指數(shù)、舒適度指數(shù)、空氣污染指數(shù)、紫外線指數(shù),用戶可以根據(jù)各種生活指數(shù)安排自己日常生活;第四頁用一個(gè)可以上下滑動(dòng)的ScrollView(卷軸視圖)顯示用戶選定的首要城市的城市簡(jiǎn)介。系統(tǒng)提供定時(shí)更新功能,根據(jù)用戶選擇可以

21、設(shè)置每天天氣自動(dòng)更新的起始時(shí)間與更新時(shí)間間隔。2.3 性能分析Android是一個(gè)多任務(wù)操作系統(tǒng),最近運(yùn)行過的程序都常駐后臺(tái),而在存管理上則由系統(tǒng)選擇性的自動(dòng)殺掉占用存的近期非活躍進(jìn)程,而不是關(guān)閉程序,當(dāng)程序再次顯示時(shí)速度更快。程序采用ViewFlipper實(shí)現(xiàn)多個(gè)頁面的滑動(dòng)切換,四個(gè)視圖頁面封裝在一個(gè)view中,不顯示的頁面有ViewFlipper封裝的資源收縮方法保留最基本的數(shù)據(jù),節(jié)約存,滑動(dòng)時(shí)只需要還原子view即可,與Activity的切換相比既節(jié)約資源,又加快了界面切換的速度。因?yàn)锳ctivity的切換涉與到Activity的創(chuàng)建與銷毀。3程序設(shè)計(jì)3.1 用戶界面設(shè)計(jì)根據(jù)需求分析可以

22、知道,應(yīng)用程序應(yīng)包含四個(gè)主要的用戶界面,以與幾個(gè)輔助頁面,這里需要進(jìn)一步分析每個(gè)用戶界面中應(yīng)該包括哪些顯示容。在城市天氣頁面,如圖3,分為上中下三個(gè)部分,上面部分顯示用戶設(shè)定的首要城市的城市名、當(dāng)日溫度區(qū)間、天氣情況、風(fēng)力大小、濕度、紫外線強(qiáng)度,實(shí)時(shí)溫度與實(shí)時(shí)天氣的圖標(biāo)。中間是三個(gè)自定義View,顯示未來三天的天氣情況,每個(gè)View中都包括日期、星期、天氣圖標(biāo)、最高溫度、最低溫度。底部顯示了當(dāng)前天氣的更新時(shí)間,與手動(dòng)更新天氣的按鈕。圖2 城市天氣添加城市頁面,如圖4,由一個(gè)GridView構(gòu)成,GridView中有9個(gè)一樣的view作為GridView的item,供用戶選擇關(guān)注的城市。每個(gè)it

23、em中顯示所選城市的天氣概覽,包括編號(hào)、城市名稱、天氣圖標(biāo)、天氣狀況、溫度與更新時(shí)間。圖3 選擇城市生活指數(shù)頁面,如圖5,生活指數(shù)頁面,通過下拉列表選擇不同的生活指數(shù)種類,顯示各種生活指數(shù),包括:晾曬指數(shù)、旅游指數(shù)、路況指數(shù)、舒適度指數(shù)、空氣污染指數(shù)、紫外線指數(shù)。圖4 生活指數(shù)城市介紹頁面,如圖6,ScrollView(卷軸視圖)顯示用戶選定的首要城市的城市簡(jiǎn)介。圖5 城市簡(jiǎn)介3.2 程序模塊設(shè)計(jì)從功能需求上分析可以看出,整個(gè)應(yīng)用程序應(yīng)劃分為3個(gè)模塊,分別是用戶界面模塊、后臺(tái)控制模塊和基礎(chǔ)功能模塊。后臺(tái)控制模塊更具用戶界面的需求調(diào)用基礎(chǔ)功能模塊的各項(xiàng)功能得到用戶界面需要的數(shù)據(jù)并返回到用戶界面。

24、基礎(chǔ)工具模塊提供天氣查詢、網(wǎng)絡(luò)狀況檢查、定時(shí)器功能 、自定義風(fēng)格dialog、數(shù)據(jù)存取、數(shù)據(jù)處理6個(gè)功能模塊;后臺(tái)控制模塊分為城市管理、dialog調(diào)用兩個(gè)部分;用戶界面模塊包括,城市天氣、城市管理、生活指數(shù)、城市簡(jiǎn)介、添加城市、定時(shí)設(shè)置、操作提示幾個(gè)部分組成。圖6 用戶界面圖7 基礎(chǔ)工程模塊4程序開發(fā)4.1 文件結(jié)構(gòu)與用途在程序開發(fā)階段,確定“基于Android平臺(tái)手機(jī)天氣預(yù)報(bào)軟件”的工程名為Weather,據(jù)程序模塊設(shè)計(jì)的容,建立Weather工程。Weather工程源代碼的結(jié)構(gòu)如圖9所示。圖8 項(xiàng)目結(jié)構(gòu)以下對(duì)項(xiàng)目Weather下各資源包進(jìn)行介紹。src文件夾中包含項(xiàng)目大部分的代碼;gen

25、是Android項(xiàng)目自動(dòng)生成的文件夾,其中由系統(tǒng)自動(dòng)生成的R.java為系統(tǒng)中每一個(gè)資源分配了一個(gè)資源編號(hào),包括圖片、string文件中定義的字符串以與layout中的布局文件和anim中的樣式文件,都會(huì)在R.java中自動(dòng)生成一個(gè)ID,方便在其他地方調(diào)用。Android 2.2與Android Dependencies是項(xiàng)目需要的jar包;bin文件夾中保存了項(xiàng)目運(yùn)行后的可執(zhí)行文件即apk文件;res下的anim文件夾中自定義界面切換樣式,drawable-hdpi、drawable-ldpi、drawable-mdpi三個(gè)文件夾中分別存放像素高、低、中的圖片資源,三個(gè)文件夾中可以存放文件名

26、一樣的圖片,但系統(tǒng)在R.java中只生成一個(gè)資源id,調(diào)用到這個(gè)Id是系統(tǒng)會(huì)根據(jù)用戶手機(jī)屏幕像素情況自動(dòng)選擇適應(yīng)屏幕的圖片,layout中定義了界面布局的xml文件,values中存放的是strings.xml字符串定義文件和自定義的樣式文件;AndroidManifest.xml中配置了系統(tǒng)的相關(guān)參數(shù),以與所有的Activity、service聲明。下面對(duì)Weather項(xiàng)目的文件用途進(jìn)行說明:表1 Weather工程的文件用途說明包 名 稱文 件 名說 明edu.qin.menuAboutActivity.java菜單中“關(guān)于”選項(xiàng)對(duì)應(yīng)的A.qin.menuMenuAc

27、tivity.java定義菜單edu.qin.serviceCityService.java創(chuàng)建城市添加到城市列表中服務(wù)edu.qin.serviceDialogService.java創(chuàng)建程序中彈出的Dialog服務(wù)edu.qin.servicePreferencesService.java用戶偏好設(shè)置服務(wù)edu.qin.serviceQueryWeatherService.java查詢天氣服務(wù)edu.qin.utilsNetworkCheck.java網(wǎng)絡(luò)檢查edu.qin.utilsStreamTool.java字節(jié)處理edu.qin.utilsTokenizerTool.java字符串

28、處理edu.qin.wfAddCityDialog.java添加城市的activityedu.qin.wfLoginActivity.java歡迎界面edu.qin.wfSettingDialog.java定時(shí)設(shè)置界面edu.qin.wfWeatherActivity.java天氣預(yù)報(bào)界面表2 自定義View與Adapter包 名 稱文 件 名說 明edu.qin.useAutoCompleteTvAdapter.java自定義adapter用于自動(dòng)適配下拉輸入框edu.qin.usecityAdapter.java自定義城市列表adapteredu.qin.useCityWeatherOve

29、rview.java西定義view,用于顯示城市天氣edu.qin.useMyDialog.java自定義dialogedu.qin.useMYGestureListener.java自定義滑動(dòng)監(jiān)聽edu.qin.useMyListview.java自定義ListViewedu.qin.useMyTextView.java自定義TextViewedu.qin.useselectCityAdapter.java自定義adapter用于城市管理Android的資源文件保存在/res的子目錄中。其中、/res/anim目錄中保存的是產(chǎn)生動(dòng)畫效果的XML文件,/res/drawable/目錄中保存的是

30、圖像文件,/res/values目錄中保存的是用來自定義字符串和顏色的文件,/res/xml目錄中保存的是XML格式的數(shù)據(jù)文件。所有在程序開發(fā)階段可以被調(diào)用的資源都保存在這些目錄中,具體每個(gè)資源文件的用途可以參考表3:表3 資源文件名稱與用途資源目錄文 件說 明animpush_left_in.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(左進(jìn))push_left_out.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(左出)push_right_in.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(右進(jìn))push_right_out.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(右出)drawable略這個(gè)文件夾里是工程里所用的圖片,如有表示天氣狀況

31、、背景等,此處不贅述。layoutabout.xml關(guān)于界面的布局city_environment.xml生活指數(shù)的布局city_intro.xml城市介紹的布局city_setting.xml城市管理的布局city_weather.xml城市天氣的布局dlg_list.xml彈出選擇列表的布局dlg_tips_one_button.xml單按鈕提示dialog的布局login.xml歡迎界面的布局option_city.xml添加城市dialog中選擇城市的布局setting.xml自動(dòng)更新天氣設(shè)定的布局view_paper.xml天氣預(yù)報(bào)滑動(dòng)容器布局weather_overview.xml

32、天氣概覽的布局weather.xml城市管理中itme的布局valuesstyles.xml自定義Dialog的樣式定義tips_styles.xml提示對(duì)話框的樣式定義strings.xml保存字符串的XML的文件4.2 數(shù)據(jù)存儲(chǔ)本程序數(shù)據(jù)存儲(chǔ)用到Android數(shù)據(jù)存儲(chǔ)的兩種方式Shared Preferences和Files。4.2.1 Shared PreferencesShared Preferences用于保存用戶的偏好設(shè)置,比如首要城市、關(guān)注城市、定時(shí)更新信息等。下面用保存首要城市名稱和取出首要城市名稱兩個(gè)例子介紹Shared Preferences的用法。(1) 保存首要城市名稱

33、的代碼:/*保存首要城市名稱,即第一頁顯示天氣的城市 * * param primaryCity */public void setPrimaryCity(String primaryCity)SharedPreferences preferences = context.getSharedPreferences(weather,context.MODE_PRIVATE);SharedPreferences.Editor editor= preferences.edit();editor.putString(primaryCity, primaryCity);editor mit();首先用g

34、etSharedPreferences方法得到一個(gè)SharedPreferences對(duì)象,文件名為weather,權(quán)限為MODE_PRIVATE。獲取SharedPreferences對(duì)象時(shí)有三種權(quán)限可以選擇,MODE_PRIVATE、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE;MODE_PRIVATE表示創(chuàng)建的文件只能由調(diào)用的應(yīng)用程序訪問,即只能被本程序訪問;MODE_WORLD_READABLE表示創(chuàng)建的文件讓所有其他應(yīng)用程序有讀權(quán)限;MODE_WORLD_WRITEABLE表示創(chuàng)建的文件讓所有其他應(yīng)用程序有寫權(quán)限。用getSharedPreferen

35、ces方法創(chuàng)建的文件,系統(tǒng)會(huì)自動(dòng)保存到用戶安裝程序的/data/data/shaared_pref文件夾下。然后用創(chuàng)建的SharedPreferences對(duì)象獲取SharedPreferences的Editor對(duì)象,再用Editor的put方法向weather文件中寫入用戶偏好設(shè)置,最后用Editor的commit方法保存寫入的用戶偏好信息。(2)取出首要城市名稱的代碼:/*取出首要城市的名稱 * return 首要城市的名稱,不存在則返回空串 */public String getPrimaryCity()SharedPreferences preferences = context.get

36、SharedPreferences(weather, context.MODE_PRIVATE);return preferences.getString(primaryCity, );讀取用戶偏好信息時(shí)要用與保存用戶偏好信息時(shí)同樣的參數(shù)獲取SharedPreferences對(duì)象,用SharedPreferences的對(duì)象調(diào)用get方法即可得到設(shè)置進(jìn)去的用戶偏好信息。4.2.2 FilesFiles數(shù)據(jù)儲(chǔ)存方式主要用來天氣信息。本程序調(diào)用webService獲取天氣信息,該webService調(diào)用采用soap2協(xié)議,通過標(biāo)準(zhǔn)xml文件流交互信息,得到的天氣預(yù)報(bào)信息為一個(gè)文件輸入流對(duì)象,保存后為

37、一個(gè)xml文件。由于天氣預(yù)報(bào)信息實(shí)時(shí)性比較強(qiáng),信息結(jié)構(gòu)復(fù)雜;將xml文件解析處理后保存到數(shù)據(jù)庫中可以以后一次也用不上,所以本程序采用文件方式保存天氣信息,Android系統(tǒng)中集成pull解析器,pull解析器是一個(gè)功能強(qiáng)大并且使用方便的xml解析器。下面通過保存天氣信息文件和讀取天氣文件介紹Files和pull解析器的用法。(1)保存天氣信息/* 保存天氣到xml文件中 * param weatherInfo 天氣情況的輸入流對(duì)象 * param cityName 城市名,這將用作文件名 * throws IOException */public void saveWeatherInfo(In

38、putStream weatherInfo,String cityName) throws IOException FileOutputStream fos = context.openFileOutput(cityName,Context.MODE_PRIVATE);byte buffer = new byte1024;int len = 0;while(len = weatherInfo.read(buffer)!= -1)fos.write(buffer, 0, len);fos.close();Files的方保存文件先用Context對(duì)象打開一個(gè)文件輸出流,與用戶偏好設(shè)置一樣,我們可以

39、設(shè)定這個(gè)文件的權(quán)限,在這里我就不再次說明,將獲取到的輸入流寫到輸出流中,關(guān)閉輸出流天氣信息就保存成功了。(2)獲取天氣信息(包括解析天氣信息)/*解析天氣預(yù)報(bào)的xml文件 * param cityName 需要解析城市的名稱 * return 天氣情況 * throws Exception */public ArrayList parseWeatherXML(String cityName) throws ExceptionArrayList weatherInfos = new ArrayList();FileInputStream fis = context.openFileInput(c

40、ityName);XmlPullParser pullParser = Xml.newPullParser();pullParser.setInput(fis, UTF-8);int event = pullParser.getEventType();while(event != XmlPullParser.END_DOCUMENT)switch (event) case XmlPullParser.START_TAG:if(string.equals(pullParser.getName()/System.out.println(pullParser.nextText();weatherIn

41、fos.add(pullParser.nextText();break;event = pullParser.next();return weatherInfos;通過要查詢的天氣的城市名稱獲取到文件輸入流,然后再同過pull解析器解析xml文件,得到天氣信息字符串,用ArrayList保存并傳出。以下是webService上得到的天氣信息(3).xml5748257482.jpg2013-1-1 16:11:23-3/101月1日 多云無持續(xù)風(fēng)向微風(fēng)1.gif1.gif今日天氣實(shí)況:氣溫:11;風(fēng)向/風(fēng)力:南風(fēng) 2級(jí);濕度:40%;空氣質(zhì)量:中;紫外線強(qiáng)度:最弱穿衣指數(shù):暫缺。 過敏指數(shù):天

42、氣條件極不易誘發(fā)過敏,可放心外出,享受生活。 運(yùn)動(dòng)指數(shù):天氣較好,但考慮天氣寒冷,推薦您進(jìn)行室運(yùn)動(dòng),若在戶外運(yùn)動(dòng)請(qǐng)注意保暖并做好準(zhǔn)備活動(dòng)。 洗車指數(shù):較適宜洗車,未來一天無雨,風(fēng)力較小,擦洗一新的汽車至少能保持一天。 晾曬指數(shù):天氣不錯(cuò),午后溫暖的仍能滿足你驅(qū)潮消霉殺菌的晾曬需求。 旅游指數(shù):多云,有時(shí)云會(huì)遮擋住,但絲毫不會(huì)影響您出行的心情。溫度適宜又有微風(fēng)相伴,很適宜旅游。 路況指數(shù):天氣較好,路面比較干燥,路況較好。 舒適度指數(shù):天氣較好,早晚會(huì)感覺偏涼,午后舒適、宜人。 空氣污染指數(shù):氣象條件對(duì)空氣污染物稀釋、擴(kuò)散和清除無明顯影響,易感人群應(yīng)適當(dāng)減少室外活動(dòng)時(shí)間。 紫外線指數(shù):屬弱紫外線

43、輻射天氣,無需特別防護(hù)。若長期在戶外,建議涂擦SPF在8-12之間的防曬護(hù)膚品。-1/31月2日 多云轉(zhuǎn)陰北風(fēng)3-4級(jí)1.gif2.gif-1/11月3日 陰轉(zhuǎn)雨夾雪北風(fēng)3-4級(jí)轉(zhuǎn)無持續(xù)風(fēng)向微風(fēng)2.gif6.gif位于省東北部,南臨省會(huì)市,北與、隨州交界,西接天門、仙桃、京山等縣市,東連黃岡市的紅安縣和市的黃陂區(qū)。因東漢孝子董永行天而得名。市是改革開放中發(fā)展起來的新興中等城市,轄孝南區(qū)、漢川市、應(yīng)城市、安陸市和云夢(mèng)縣、大悟縣、孝昌縣;國土面積11560平方公里,總?cè)丝?80萬人。是楚文化的重要發(fā)祥地之一。周代貳國、軫國、鄖國都建都于此。代竹簡(jiǎn)、漢漆器、東漢樓等國寶文物和楚王城等遺址展示了絢麗多

44、財(cái)?shù)墓糯幕?。剪紙、皮影、膏塑等傳統(tǒng)文化藝術(shù)源源流長。市屬亞熱帶大陸性季風(fēng)氣候,四季分明,雨量充沛,溫暖濕潤,光照充足。全年主導(dǎo)風(fēng)向?yàn)闁|南風(fēng),年均氣溫在15.5-16.5C之間。景觀:大洪山、白水寺、白云泉、石刻題記、董永故里、鄂豫邊區(qū)革命烈士陵園、高掛三潭、擂鼓墩古墓群。從上面天氣信息xml文件看出,有用的天氣信息都在標(biāo)簽中,我們用pull解析器不斷解析,并保存string標(biāo)簽中的容便可以得到天氣信息。while(event != XmlPullParser.END_DOCUMENT)switch (event) case XmlPullParser.START_TAG:if(string.

45、equals(pullParser.getName()weatherInfos.add(pullParser.nextText();break;event = pullParser.next();4.3 主要功能代碼本項(xiàng)目使用的代碼較多,本部分對(duì)天氣預(yù)報(bào)項(xiàng)目中核心代碼進(jìn)行解析,這部分代碼能夠完成天氣預(yù)報(bào)的查詢與顯示的基本功能,另外一部分代碼則實(shí)現(xiàn)的了能夠與用戶更好的交互,增加應(yīng)用的界面美觀的功能。4.3.1 獲取天氣數(shù)據(jù)從 HYPERLINK :/ webxml .cn/ Service中獲取的天氣數(shù)據(jù),數(shù)據(jù)的獲取地址為: HYPERLINK :/ webxml .cn/WebServices

46、/WeatherWebService.asmx * * param cityName 城市名 * return 獲取成功則返回true,否則false * throws Exception */public boolean queryWeather(String cityName) throws Exceptionfinal String WEATHER_CITY = soap = readSoap();soap = soap.replaceAll($cityNameaa, cityName);byte entity = soap.getBytes();String path = WEATHE

47、R_CITY; URLConnection conn = ( URLConnection) new URL(path).openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod(POST);conn.setDoOutput(true);conn.setRequestProperty(Content-Type, application/soap+xml; charset=utf-8);conn.setRequestProperty(Content-Length, String.valueOf(entity.length

48、);conn.getOutputStream().write(entity);if(conn.getResponseCode() = 200)/保存天氣信息到xml文件saveWeatherInfo(conn.getInputStream(),cityName);return true;return false;readSoap方法private static String readSoap() throws Exception InputStream inputStream = QueryWeatherService.class.getClassLoader().getResourceAsS

49、tream(soap12.xml);byte data = StreamTool.read(inputStream);return new String(data);通過readSoap方法讀取src下soap12.xml文件,得到訪問天氣預(yù)報(bào)的webService的標(biāo)準(zhǔn)天氣交互格式,查詢天氣時(shí)將xml中指定的城市名稱換成實(shí)際要查詢的天氣預(yù)報(bào)的城市名,然后提交查詢。然后獲取到天氣信息的輸入流對(duì)象。4.3.2 網(wǎng)絡(luò)檢查public static boolean ckeck(Context context) ConnectivityManager con = (ConnectivityManage

50、r) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkinfo = con.getActiveNetworkInfo();if (networkinfo = null | !networkinfo.isConnected() / 當(dāng)前網(wǎng)絡(luò)不可用return false;return true;檢查設(shè)備當(dāng)前是否接入網(wǎng)絡(luò),使用此功能需要在AndroidManifest.xml中添加訪訪問權(quán)限:4.3.3 定時(shí)更新時(shí)間 本程序一啟動(dòng)就會(huì)啟動(dòng)就會(huì)查看用戶偏好設(shè)置中用戶是否啟用自動(dòng)更新天氣服務(wù),若啟用,程

51、序會(huì)啟動(dòng)TimeService這個(gè)后臺(tái)服務(wù),按照用戶設(shè)置進(jìn)行天氣信息更新。核心代碼如下:AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);alarmManager.set(AlarmManager.RTC_WAKEUP, now + updateMilis, pendingIntent);至此,后臺(tái)服務(wù)介紹完畢,最后還需要在AndroidManifest.xml文件中注冊(cè)后臺(tái)服務(wù)。4.3.4 ViewFlipper手勢(shì)監(jiān)聽七彩天氣主界面的Activity實(shí)現(xiàn)了OnGestureLi

52、stener接口,下面onFling方法就是OnGestureListener中的一個(gè)方法,該方法實(shí)現(xiàn)了viewFlipper對(duì)滑動(dòng)手勢(shì)的監(jiān)聽,并完成滑動(dòng)切換效果。onFling中兩個(gè)MotionEvent參數(shù)分別是用戶做滑動(dòng)手勢(shì)時(shí),觸屏的起點(diǎn)位置和終點(diǎn)位置,通過getX()方法取出觸點(diǎn)的X軸坐標(biāo),計(jì)算終點(diǎn)X軸坐標(biāo)與起點(diǎn)X軸坐標(biāo),差值大于100dp,則認(rèn)為用戶使用滑動(dòng)手勢(shì),通過差值的正負(fù)來判斷用戶需要向左滑動(dòng)還是向右滑動(dòng),如果差值為正則從左向右滑動(dòng),反之從右向左滑動(dòng)。Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, f

53、loat velocityX,float velocityY) if (e2.getX() - e1.getX() 100) / 從左向右滑動(dòng)(左進(jìn)右出)if(myViewFlipper.isFlipping()/如果ViewFlipper正在滑動(dòng),則不劃動(dòng)到下一頁,沒有實(shí)現(xiàn)System.out.println(myViewFlipper.isFlipping);return true;Animation rInAnim = AnimationUtils.loadAnimation(WeatherActivity.this,R.anim.push_right_in); / 向右滑動(dòng)左側(cè)進(jìn)入的漸

54、變效果(alpha 0.1 - 1.0)Animation rOutAnim = AnimationUtils.loadAnimation(WeatherActivity.this,R.anim.push_right_out); / 向右滑動(dòng)右側(cè)滑出的漸變效果(alpha 1.0 - 0.1)myViewFlipper.setInAnimation(rInAnim);myViewFlipper.setOutAnimation(rOutAnim);myViewFlipper.showPrevious();return true; else if (e2.getX() - e1.getX() 1.

55、0)Animation lOutAnim = AnimationUtils.loadAnimation(WeatherActivity.this,R.anim.push_left_out); / 向左滑動(dòng)右側(cè)滑出的漸變效果(alpha 1.0 - 0.1)myViewFlipper.setInAnimation(lInAnim);myViewFlipper.setOutAnimation(lOutAnim);myViewFlipper.showNext();return true;return true;4.3.5 城市管理中城市點(diǎn)擊事件城市管理中采用GridView以網(wǎng)格形式展現(xiàn)給用戶9個(gè)城

56、市管理區(qū)域,用戶在這9個(gè)區(qū)域中可以自由添加或刪除關(guān)注的城市。GridViewItemClickListener中寫了當(dāng)GridView中某一個(gè)itme被點(diǎn)擊時(shí)所做出想響應(yīng)。當(dāng)用戶點(diǎn)擊的位置對(duì)應(yīng)了一個(gè)用戶已經(jīng)關(guān)注的城市(即觸點(diǎn)在“+”前面),程序會(huì)先將本城市設(shè)定為首要城市,然后發(fā)送UI更新消息,更新城市天氣界面,最后將界面焦點(diǎn)自動(dòng)定位到城市天氣頁面;如果點(diǎn)擊位置對(duì)應(yīng)的是“+”,則彈出添加城市對(duì)話框;如果點(diǎn)擊位置在“+”之后,程序不會(huì)響應(yīng)這個(gè)事件。class GridViewItemClickListener implements OnItemClickListenerpublic void on

57、ItemClick(AdapterView arg0, View arg1, int position,long arg3) System.out.println(GridViewItemClickListener);preferencesService = new PreferencesService(w_context);/得出當(dāng)前已經(jīng)設(shè)定的城市數(shù)目setCtiyNum = preferencesService.nowCityNum();/如果點(diǎn)擊的位置小于當(dāng)前設(shè)定城市的數(shù)目,跳轉(zhuǎn)到position指定的城市天氣界面if(position setCtiyNum)/添加代碼,跳到城市天氣那一

58、頁,并設(shè)定首要城市為選定的城市String selectCityName = preferencesService.getCityNameByCityNum(position+1);primaryCity = selectCityName;preferencesService.setPrimaryCity(selectCityName);isParseWeather = getWeatherFromXML();/嘗試解析primaryCity天氣情況if(!isParseWeather)/如果不存在天氣文件,更新天氣,更新天氣完畢發(fā)送刷新消息refreshWeather(primaryCity

59、);/解析成功,發(fā)送更新第一個(gè)界面Message msg = new Message();msg.what = 1;myHandler.sendMessage(msg);/跳到第一頁myViewFlipper.setDisplayedChild(0);/如果點(diǎn)擊的位置等于當(dāng)前設(shè)定城市的數(shù)目,跳轉(zhuǎn)到添加城市界面else if(position = setCtiyNum)AddCityDialog showDialog = new AddCityDialog(w_context,myHandler); /創(chuàng)建類對(duì)象showDialog.CreateDialog(ADD);/創(chuàng)建需要的dialog/如果點(diǎn)擊的位置大于當(dāng)前設(shè)定城市的數(shù)目,不作處理 4.4 主要界面結(jié)構(gòu)布局代碼在用戶界面設(shè)計(jì)上,采用了ViewFlipper框架結(jié)構(gòu),提供直觀的交互操作以與體驗(yàn)良好的滑動(dòng)效果。4.4.1 ViewFlipper框架結(jié)構(gòu)ViewFlipper中定義了四個(gè)界面分別是城市天氣、城市管理、生活指數(shù)、城市介紹,這四個(gè)界面是與用戶交互天氣信息最主要的界面。下面是的布局文件代碼。view_paper.xml 4.4.2 城市管理界面城市管理界面以一個(gè)GridView顯示用戶已經(jīng)關(guān)注的城市,沒有關(guān)注的城市用空白表示,下面是城市管理界面布局文件的主要代碼:city_setting.xml 4.4.3 生活指

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論