Android手機(jī)天氣預(yù)報(bào)項(xiàng)目報(bào)告_第1頁(yè)
Android手機(jī)天氣預(yù)報(bào)項(xiàng)目報(bào)告_第2頁(yè)
Android手機(jī)天氣預(yù)報(bào)項(xiàng)目報(bào)告_第3頁(yè)
Android手機(jī)天氣預(yù)報(bào)項(xiàng)目報(bào)告_第4頁(yè)
Android手機(jī)天氣預(yù)報(bào)項(xiàng)目報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1.2 開發(fā)目標(biāo)現(xiàn)有的G技術(shù)和移動(dòng)互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,智能手機(jī)功能的不斷增強(qiáng),讓基于Android平臺(tái)的查詢需求越來(lái)越多。本軟件就是利用現(xiàn)有的網(wǎng)絡(luò)快速獲取網(wǎng)絡(luò)上的天氣信息并顯示到手機(jī)終端上,為用戶提供實(shí)時(shí)的天氣查詢和近期天氣查詢服務(wù),為工作、出行等帶來(lái)便利。通過(guò)Web Service等技術(shù)讓用戶體驗(yàn)到前所未有的移動(dòng)計(jì)算。第2章 項(xiàng)目設(shè)計(jì)2.1 項(xiàng)目總體設(shè)計(jì)本軟件是一個(gè)App Widget應(yīng)用程序,啟動(dòng)程序后可以進(jìn)行城市、更新頻率的設(shè)置,可以通過(guò)圖片和文字顯示當(dāng)前和未來(lái)的天氣狀況,包括溫度、濕度、風(fēng)向和雨雪情況等。這些天氣數(shù)據(jù)是通過(guò)后臺(tái)服務(wù)獲取的,這個(gè)后臺(tái)服務(wù)可以按照一定的時(shí)間間隔,通過(guò)Goo

2、gle提供的服務(wù)獲取天氣預(yù)報(bào)信息,并將天氣信息保存在數(shù)據(jù)庫(kù)中。該軟件的基本功能需求有:(1) 啟動(dòng)App Widget應(yīng)用程序;(2) 設(shè)置界面:對(duì)要顯示天氣預(yù)報(bào)的城市及更新頻率進(jìn)行設(shè)置;(3) 顯示界面:通過(guò)文字和圖片顯示當(dāng)前的天氣情況,包括日期、時(shí)間、城市、最高溫度、最低溫度、當(dāng)前溫度等。(4) 詳細(xì)界面:在顯示出“顯示界面”上所有信息的同時(shí)用列表的形式顯示今后四天的天氣情況。2.2 技術(shù)框架設(shè)計(jì)2.2.1開發(fā)環(huán)境Android的上層應(yīng)用程序是用Java語(yǔ)言開發(fā)的,一般情況下是基于Dalvik虛擬機(jī)的,所以Google公司推薦使用主流的Java集成開發(fā)環(huán)境Eclipse。而用Java語(yǔ)言進(jìn)

3、行開發(fā),需要用到SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的應(yīng)用程序開發(fā)和Java開發(fā)有較大區(qū)別的,需要使用Google提供的Android SDK。同時(shí),要在Eclipse上安裝ADT,為Android開發(fā)提供開發(fā)工具的升級(jí)或者變更,是Eclipse下開發(fā)工具的升級(jí)或下載的工具。簡(jiǎn)言之,需要以下軟件,才能搭建Android開發(fā)環(huán)境,從而進(jìn)行Android應(yīng)用程序的開發(fā)。(1) Java SDK(2) Eclipse(3) Android SDK(4) ADT2.2.2 技術(shù)支持本軟件使用基于SOAP(簡(jiǎn)單對(duì)象訪問(wèn)

4、協(xié)議)的Web Service技術(shù)來(lái)實(shí)現(xiàn)與服務(wù)器端的信息交互,獲取網(wǎng)絡(luò)上的數(shù)據(jù)。Web Service使用基于XML技術(shù)的消息處理,作為基本的數(shù)據(jù)通訊方式。Web Service建立在一些通用協(xié)議的基礎(chǔ)上,如HTTP、SOAP、XML、WSDL、UDDI等。各應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議和規(guī)定的一些標(biāo)準(zhǔn)數(shù)據(jù)格式(HTTP、XML、SOAP)來(lái)訪問(wèn)Web Service。而所有的SOAP消息都使用XML編碼。一條SOAP消息就是一個(gè)包含有一個(gè)必需的SOAP的封裝包,一個(gè)可選的SOAP標(biāo)頭和一個(gè)必需的SOAP體塊的XML文檔。XML文檔在Android平臺(tái)上的解析可以通過(guò)SAX的方式方便快速的完成。解析A

5、ndroid應(yīng)用程序中獲得的列表數(shù)據(jù)XML文件,對(duì)XML文件中的數(shù)據(jù)實(shí)現(xiàn)分離,得到指定的所需要的信息,然后執(zhí)行存入數(shù)據(jù)庫(kù)或顯示到頁(yè)面等相應(yīng)的處理。Android的開發(fā)組Activity、Intent Receiver、Service、Content Provider等,可以實(shí)現(xiàn)不同頁(yè)面之間的跳轉(zhuǎn);數(shù)據(jù)的獲取和實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的實(shí)時(shí)交互;不同頁(yè)面和進(jìn)程間數(shù)據(jù)的共享。2.3 數(shù)據(jù)庫(kù)設(shè)計(jì)本軟件中有兩部分?jǐn)?shù)據(jù)需要存儲(chǔ),一個(gè)是顯示頁(yè)面的數(shù)據(jù),另一個(gè)是詳細(xì)頁(yè)面的數(shù)據(jù)。但是數(shù)據(jù)量都不是很大,因此可以選擇SQLite數(shù)據(jù)庫(kù)作為存儲(chǔ)數(shù)據(jù)的方法,建立數(shù)據(jù)庫(kù)forecasts.db,并且建立兩張表weather_wid

6、get和weather_forecast,分別存儲(chǔ)顯示頁(yè)面的數(shù)據(jù)和詳細(xì)頁(yè)面的數(shù)據(jù)。表2-1 詳細(xì)頁(yè)面的數(shù)據(jù)庫(kù)表weather_forecast的結(jié)構(gòu)屬性數(shù)據(jù)類型說(shuō)明_idinteger自動(dòng)增加的主鍵widgetIdinteger組件的ID號(hào)dayOfWeektext周幾lowinteger最低溫度hightinteger最高溫度icontext顯示天氣的圖標(biāo)conditiontext未來(lái)天氣情況表2-2 顯示頁(yè)面的數(shù)據(jù)庫(kù)表weather_widget的結(jié)構(gòu)屬性數(shù)據(jù)類型說(shuō)明_idinteger存儲(chǔ)Widget組件idcitytext進(jìn)行天氣信息查詢的城市名updateMilistext進(jìn)行天氣信

7、息查詢的頻率,單位為分/次isConfiguredtext是否設(shè)置postalCodetext城市標(biāo)記forecastDateinteger預(yù)報(bào)日期conditiontext當(dāng)前天氣情況tempFinteger最高溫度tempCinteger最低溫度humiditytext當(dāng)前濕度icontext天氣圖標(biāo)windConditiontext風(fēng)向風(fēng)速情況lastUpdateTimeinteger最后一次更新時(shí)間2.4 功能模塊設(shè)計(jì)從功能需求上分析可以看出,整個(gè)應(yīng)用程序應(yīng)劃分為4個(gè)模塊,分別是程序啟動(dòng)、用戶界面、后臺(tái)服務(wù)和數(shù)據(jù)庫(kù)適配器,各模塊之間的關(guān)系如圖2-1所示。圖 2-1 各功能模塊間的關(guān)系從

8、模塊結(jié)構(gòu)圖中不難看出,后臺(tái)服務(wù)是整個(gè)應(yīng)用程序的核心,主要是“數(shù)據(jù)獲取模塊”,負(fù)責(zé)周期性的從Google獲取天氣信息。后臺(tái)服務(wù)在程序啟動(dòng)時(shí)就由AppWidgetProvider啟動(dòng),也可由用戶界面通過(guò)startService()進(jìn)行啟動(dòng),啟動(dòng)后的后臺(tái)服務(wù)將一直保持運(yùn)行狀態(tài)。用戶界面是從數(shù)據(jù)庫(kù)中獲取天氣信息,而沒(méi)有直接通過(guò)網(wǎng)絡(luò)訪問(wèn)Google的天氣數(shù)據(jù)。這樣設(shè)計(jì),一方面可以避免因網(wǎng)絡(luò)通信不暢而造成界面失去響應(yīng);另一方面,后臺(tái)服務(wù)可以及時(shí)更新數(shù)據(jù),以保證數(shù)據(jù)的準(zhǔn)確性。數(shù)據(jù)庫(kù)適配器封裝了所有對(duì)SQLite數(shù)據(jù)庫(kù)操作的方法,用戶界面和后臺(tái)服務(wù)會(huì)調(diào)用它來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。第3章 項(xiàng)目功能描述3.1 系統(tǒng)

9、主要功能本軟件要完成在android手機(jī)上實(shí)現(xiàn)天氣的即時(shí)預(yù)報(bào)。所涉及的功能有:1.啟動(dòng)程序后可以進(jìn)行城市、更新頻率的設(shè)置;2.可以通過(guò)圖片和文字顯示當(dāng)前和未來(lái)的天氣狀況,包括溫度、濕度、風(fēng)向和雨雪情況等。使用效果圖實(shí)現(xiàn)與相應(yīng)天氣的結(jié)合。3.這些天氣數(shù)據(jù)是通過(guò)后臺(tái)服務(wù)獲取的,這個(gè)后臺(tái)服務(wù)可以按照一定的時(shí)間間隔,通過(guò)Google提供的公共接口獲取天氣預(yù)報(bào)信息,并將天氣信息保存在本地?cái)?shù)據(jù)庫(kù)中。3.2 系統(tǒng)各模塊具體實(shí)現(xiàn)3.2.1 文件結(jié)構(gòu)與用途在程序開發(fā)階段,首先確定“Android手機(jī)天氣預(yù)報(bào)軟件”的工程名為ty-weather,據(jù)程序模塊設(shè)計(jì)的內(nèi)容,建立ty-weather工程。工程源代碼的結(jié)構(gòu)

10、如圖3-1所示。圖3-1 ty-weather工程的源代碼文件結(jié)構(gòu)為了使源代碼文件的結(jié)構(gòu)更加清晰,Weather工程設(shè)置了多個(gè)命名空間,分別用來(lái)保存用戶界面、數(shù)據(jù)庫(kù)、后臺(tái)服務(wù)和工具實(shí)體的源代碼文件。源代碼文件的名稱以及說(shuō)明如表3-1所示。表3-1 ty-weather工程的文件用途說(shuō)明包 名 稱文 件 名說(shuō) 明com.ty.weatherConfigureActivity.java“設(shè)置頁(yè)面”的Activitycom.ty.weatherDetailForecastActivity.java“詳細(xì)頁(yè)面”的Activitycom.ty.weatherForecastProvider.java天氣

11、預(yù)報(bào)相關(guān)數(shù)據(jù)提供者,操作數(shù)據(jù)庫(kù)com.ty.weatherForecastService.java后臺(tái)進(jìn)程服務(wù)com.ty.weatherForecastTimeService.java后臺(tái)時(shí)間服務(wù)com.ty.weatherForecastWidget.java實(shí)現(xiàn)AppWidget組件,并啟動(dòng)服務(wù)com.ty.weatherWebServiceHelper.java網(wǎng)絡(luò)數(shù)據(jù)獲取模塊com.ty.weather.utilForecastEntity.java未來(lái)天氣信息的類com.ty.weather.utilForecastUtil.java天氣信息工具類com.ty.weather.ut

12、ilWidgetEntity.java當(dāng)前天氣信息的類Android的資源文件保存在/res的子目錄中。其中、/res/anim目錄中保存的是產(chǎn)生動(dòng)畫效果的XML文件,/res/drawable/目錄中保存的是圖像文件,/res/values目錄中保存的是用來(lái)自定義字符串和顏色的文件,/res/xml目錄中保存的是XML格式的數(shù)據(jù)文件。所有在程序開發(fā)階段可以被調(diào)用的資源都保存在這些目錄中,具體每個(gè)資源文件的用途可以參考表3-2:表3-2 資源文件名稱與用途資源目錄文 件說(shuō) 明Animrotatecurrentweather.xml漸變透明度動(dòng)畫效果translatecloudleft.xml畫

13、面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(從左至右)translatecloudright.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(從右至左)translaterain01.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(從上至下)translaterain02.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(從上至下)translaterain03.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(從上至下)translaterain04.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(從上至下)translaterain05.xml畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果(從上至下)drawablecloudy.png這個(gè)文件夾里是工程里所用的圖片,如有表示天氣狀況、數(shù)字等,此處不贅述。dots

14、.pngnumber_7_tahoma.pngweather_sunny.pnglayoutconfigure.xml設(shè)置城市、天氣更新頻率的布局weather.xml“顯示頁(yè)面”的布局detail.xml“詳細(xì)顯示”頁(yè)面上邊的顯示當(dāng)前天氣的布局detailitems.xml“詳細(xì)顯示”頁(yè)面下邊的顯示未來(lái)天氣的布局valuescolor.xml保存顏色的XML文件strings.xml保存字符串的XML的文件xmlweatherwidget.xmlAppWidget的屬性文件3.2.2 數(shù)據(jù)提供者數(shù)據(jù)提供者ForecastProvider繼承ContentProvider,是在應(yīng)用程序間共享數(shù)

15、據(jù)的一種接口機(jī)制。應(yīng)用程序在不同的進(jìn)程中運(yùn)行,因此,數(shù)據(jù)和文件在不同的應(yīng)用程序之間是不能夠直接進(jìn)行訪問(wèn)的。而ContentProvider為程序員提供了較高級(jí)的數(shù)據(jù)共享方法,應(yīng)用程序可以指定需要共享的數(shù)據(jù),而其他應(yīng)用程序則可以在不知數(shù)據(jù)來(lái)源、路徑的情況下,對(duì)共享數(shù)據(jù)進(jìn)行查詢、添加、刪除和更新等操作。 在創(chuàng)建ForecastProvider時(shí),首先需要使用數(shù)據(jù)庫(kù)、文件系統(tǒng)或網(wǎng)絡(luò)實(shí)現(xiàn)底層存儲(chǔ)功能,這里我們采用數(shù)據(jù)庫(kù)建立了數(shù)據(jù)庫(kù)設(shè)計(jì)中的兩張表,從而實(shí)現(xiàn)了底層存儲(chǔ)功能。然后在繼承ContentProvider的類中實(shí)現(xiàn)基本數(shù)據(jù)操作的接口函數(shù),包括添加、刪除、查找和更新等功能。(1)創(chuàng)建數(shù)據(jù)庫(kù):Data

16、baseHelper類繼承SQLiteOpenHelper,SQLiteOpenHelper這個(gè)類可以輔助建立、更新和打開數(shù)據(jù)庫(kù)。DatabaseHelper在建立數(shù)據(jù)庫(kù)時(shí),同時(shí)建立了兩個(gè)數(shù)據(jù)庫(kù)表weather_widget和weather_forcast,并對(duì)保存配置信息的表進(jìn)行了初始化。(2)URI設(shè)置:ContentProvider可以提供多個(gè)數(shù)據(jù)集,調(diào)用者使用URI(通用資源標(biāo)識(shí)符)對(duì)不同的數(shù)據(jù)集的數(shù)據(jù)進(jìn)行操作。URI用來(lái)定位任何遠(yuǎn)程或本地的可用資源。ContentProvider使用的URI語(yǔ)法結(jié)構(gòu)content:/<authority>/<data_path>

17、;/<id>。因此,我們就需要先來(lái)對(duì)URI進(jìn)行設(shè)置。(3)查詢功能:執(zhí)行數(shù)據(jù)的查詢功能主要用到SQLiteQueryBuilder的query()方法。Query(SQLiteDatabase db,String projectionIn,String selection,String selectionArgs,String groupBy,String having,String sortOrder,String limit),參數(shù)說(shuō)明如下表3-3所示:表 3-3 query()方法的參數(shù)說(shuō)明參 數(shù)說(shuō) 明SQLiteDatabase db要查詢的數(shù)據(jù)庫(kù)實(shí)例String proj

18、ectionIn是一個(gè)字符串?dāng)?shù)組,里邊的每一項(xiàng)代表了需要返回的列名String selection相當(dāng)于SQL語(yǔ)句中的where部分StringselectionArgs是一個(gè)字符串?dāng)?shù)組,里邊的每一項(xiàng)依次替代在第三個(gè)參數(shù)中出現(xiàn)的問(wèn)號(hào)(?)String groupBy相當(dāng)于SQL語(yǔ)句當(dāng)中的groupby部分String having相當(dāng)于SQL語(yǔ)句當(dāng)中的having部分String sortOrder描述是怎么進(jìn)行排序String limit相當(dāng)于SQL當(dāng)中的limit部分,控制返回的數(shù)據(jù)的個(gè)數(shù)(4)添加、刪除、更新功能,對(duì)數(shù)據(jù)庫(kù)表中存放的天氣等信息進(jìn)行有效的管理。添加功能:public Uri

19、 insert(Uri uri, ContentValues values)。 刪除功能:public int delete(Uri uri,String selection,String selectionArgs)。更新功能:public int update(Uri uri,ContentValues values,Stringselection,String selectionArgs)。(5)類型匹配:增刪改查通過(guò)switch判斷,進(jìn)行不同的操作,因而還需要對(duì)關(guān)鍵字進(jìn)行類型匹配。3.2.3 后臺(tái)服務(wù)后臺(tái)服務(wù)是ty-weather工程的核心模塊,在用戶啟動(dòng)后持續(xù)在后臺(tái)運(yùn)行,直到用戶停止

20、服務(wù)。后臺(tái)服務(wù)主要有三個(gè)功能:一是周期性的獲取Google的天氣數(shù)據(jù)并存儲(chǔ)到SQLite,二是從SQLite讀取出要顯示的數(shù)據(jù),三是定時(shí)更新“顯示頁(yè)面”的時(shí)間。(1) 獲取天氣數(shù)據(jù)天氣數(shù)據(jù)的獲取天氣數(shù)據(jù)分為以下三個(gè)步驟:1.從Google提供的Web Service中獲取的天氣數(shù)據(jù),數(shù)據(jù)的獲取地址是: 2.調(diào)用輕量級(jí)XML解析器XmlPullParser對(duì)從網(wǎng)絡(luò)上獲取的字節(jié)流數(shù)據(jù)進(jìn)行解析,并且將解析結(jié)果保存在WidgetEntity對(duì)象中。3.將解析好的數(shù)據(jù)存儲(chǔ)到SQLite數(shù)據(jù)庫(kù)中。其過(guò)程是:使用ContentResolver對(duì)象,通過(guò)URI間接調(diào)用ContentProvider,使用Con

21、tentResolver對(duì)象與ContentProvider進(jìn)行交互,而ContentResolver則通過(guò)URI確定需要訪問(wèn)的ContentProvider的數(shù)據(jù)集。調(diào)用關(guān)系如下圖3-2所示。圖3-2 ContentProvider的調(diào)用關(guān)系(2) 讀取天氣數(shù)據(jù)實(shí)例通過(guò)WebServiceHelper.getWidgetEntity()方法操作數(shù)據(jù)庫(kù)取出所需要的數(shù)據(jù)。(3) 定時(shí)更新時(shí)間。AppWidget一啟動(dòng)就會(huì)啟動(dòng)ForcastTimeService這個(gè)后臺(tái)服務(wù),此服務(wù)設(shè)置了每隔20秒刷新一次時(shí)間,“顯示頁(yè)面”通過(guò)這個(gè)后臺(tái)服務(wù)獲取系統(tǒng)時(shí)間從而顯示。如下圖所示:Android平臺(tái)上的應(yīng)用

22、程序所要啟動(dòng)的服務(wù)需要在AndroidManifest.xml配置文件中注冊(cè)。<serviceandroid:name="ForecastService"></service><service android:name="ForecastTimeService"></service>3.2.4用戶界面在用戶界面設(shè)計(jì)上,采用了AppWidget框架結(jié)構(gòu),提供直觀的交互操作。三個(gè)用戶界面風(fēng)格簡(jiǎn)約、操作簡(jiǎn)便,用戶體驗(yàn)將非常好。如下圖3-3所示:圖-3 系統(tǒng)主要用戶界面程序的入口類ForecastWidget在設(shè)計(jì)

23、上采用了AppWidget框架結(jié)構(gòu),AppWidget就是HomeScreen上顯示的小部件,通過(guò)在HomeScreen空白處長(zhǎng)按,在彈出的對(duì)話框中選擇Widget部件來(lái)進(jìn)行創(chuàng)建。此外,長(zhǎng)按部件后并拖動(dòng)到垃圾箱里進(jìn)行刪除,也可以拖動(dòng)到屏幕的其他地方,或者拖動(dòng)到下一個(gè)屏幕上。設(shè)置頁(yè)面ConfigureActivity繼承Activity并且實(shí)現(xiàn)了View.OnClickListener接口,AppWidget第一次啟動(dòng)之前會(huì)先運(yùn)行ConfigureActivity,會(huì)出現(xiàn)設(shè)置頁(yè)面用戶進(jìn)行設(shè)置,點(diǎn)擊保存按鈕就會(huì)將設(shè)置好的參數(shù)會(huì)存儲(chǔ)到SQLite中。詳細(xì)頁(yè)面DetailForecastActivity主要用來(lái)顯示詳細(xì)的天氣信息,包括當(dāng)天和未來(lái)四天的天氣信息。為了能夠以列表的形式顯示多行數(shù)據(jù),并制定每行數(shù)據(jù)的布局,使用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論