1.天氣預(yù)報(bào)論文報(bào)告_第1頁
1.天氣預(yù)報(bào)論文報(bào)告_第2頁
1.天氣預(yù)報(bào)論文報(bào)告_第3頁
1.天氣預(yù)報(bào)論文報(bào)告_第4頁
1.天氣預(yù)報(bào)論文報(bào)告_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

大作業(yè)報(bào)告書課程名:Android開發(fā)題目:天氣預(yù)報(bào)APP院系:數(shù)學(xué)與信息科學(xué)學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):學(xué)生姓名:指導(dǎo)教師:職稱:二○二一年六月摘要天氣預(yù)報(bào)為人們了解天氣狀況和出行安排帶來了方便,但是,大多數(shù)天氣預(yù)報(bào)軟件都是基于PC端,查詢起來并不是很便捷。而隨著智能手機(jī)的普及和網(wǎng)絡(luò)技術(shù)的發(fā)展,手機(jī)端實(shí)現(xiàn)天氣查詢成為了可能,因此,實(shí)現(xiàn)手機(jī)端的天氣預(yù)報(bào)系統(tǒng)成為了人們迫切需要且切實(shí)可行的需求。本設(shè)計(jì)使用Android設(shè)計(jì)技術(shù)開發(fā)了一種運(yùn)用在Android系統(tǒng)上的手機(jī)天氣預(yù)報(bào)軟件系統(tǒng),本系統(tǒng)通過選擇城市來獲得天氣,風(fēng)向,溫度等信息?;谑謾C(jī)的天氣預(yù)報(bào)系統(tǒng)軟件可以使用戶對(duì)于各地的天氣情況的實(shí)時(shí)掌握,極大的方便了用戶的出行和行程安排,避免了不必要的麻煩,具有很強(qiáng)的實(shí)用性。本論文首先進(jìn)行了項(xiàng)目的背景介紹,開發(fā)的目的及意義,接著進(jìn)行系統(tǒng)分析(包括需求分析、研究目標(biāo)和內(nèi)容),接著分析了Android系統(tǒng)的框架,然后介紹了本系統(tǒng)的用到的技術(shù)以及平臺(tái)的搭建,最后論述了本系統(tǒng)的詳細(xì)設(shè)計(jì)(包括功能模塊設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì)等),接著進(jìn)行了項(xiàng)目的測(cè)試用例分析,最后給出了結(jié)論以及展望。關(guān)鍵詞:天氣預(yù)報(bào);Android;linux內(nèi)核指導(dǎo)老師:xx

AbstractWeatherforecastforpeopletounderstandtheweatherconditionsandtravelarrangementshasbroughtconvenience,butmostoftheweatherforecastsoftwareisbasedonthePCterminal,queryisnotveryconvenient.Withthepopularizationofsmartphonesandthedevelopmentofnetworktechnology,ithasbecomepossibletorealizetheweatherqueryonmobilephones.Therefore,ithasbecomeanurgentandfeasibledemandtorealizetheweatherforecastsystemonmobilephones.ThisdesignusestheAndroiddesigntechnologytodevelopamobilephoneweatherforecastsoftwaresystem.Thissystemobtainsweather,winddirection,temperatureandotherinformationbyselectingthecity.Weatherforecastsystemsoftwarebasedonmobilephonecanhelpuserstograspthereal-timeweatherconditionsaroundtheplace,greatlyconvenientforuserstotravelanditineraryarrangement,avoidunnecessarytrouble,hasastrongpracticability.Thispaperfirstintroducesthebackgroundoftheproject,thepurposeandsignificanceofthedevelopment,andthencarriesoutthesystemanalysis(includingdemandanalysis,researchobjectivesandcontent).ThenitanalyzestheframeworkoftheAndroidsystem,andthenintroducesthetechnologyusedinthesystemandtheconstructionoftheplatform.Finally,thedetaileddesignofthesystem(includingfunctionalmoduledesign,databasedesign,etc.)isdiscussed,andthenthetestcaseanalysisoftheprojectiscarriedout.Finally,theconclusionsandprospectsaregiven.Keywords:Weatherforecast;Android.TheLinuxkernelInstructor:GongJin

前言手機(jī)是已經(jīng)成為了生活中不可少的通信設(shè)備,沒有手機(jī)有時(shí)會(huì)讓人覺得寸步難行,手機(jī)將脫離傳統(tǒng)的打電話,發(fā)短信等基本功能,而基于智能手機(jī)的處理能力和可擴(kuò)展能力,基于網(wǎng)絡(luò)高速數(shù)據(jù)傳輸,越來越多的功能和業(yè)務(wù)將被開發(fā)出來并大規(guī)模的應(yīng)用。正基于此,當(dāng)全世界的目光聚集在此的時(shí)候,Google于2007年11月5日宣布推出基于 linux平臺(tái)的開源手機(jī)操作系統(tǒng),號(hào)稱首個(gè)為移動(dòng)終端打造的真正開發(fā)和完整的移動(dòng)軟析android[1]?,F(xiàn)有的移動(dòng)互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,智能手機(jī)功能的不斷增強(qiáng),讓基于Android平臺(tái)的查詢需求越來越多。本軟件就是利用現(xiàn)有的網(wǎng)絡(luò)快速獲取網(wǎng)絡(luò)上的天氣信息并顯示到手機(jī)終端上,為用戶提供實(shí)時(shí)的天氣查詢和近期天氣查詢服務(wù),為工作、出行等帶來便利。本文的結(jié)構(gòu)如下:第一章是緒論部分,敘述了本系統(tǒng)的開發(fā)背景、開發(fā)目標(biāo)、開發(fā)意義以及國內(nèi)外的一些比較。第二章介紹了本系統(tǒng)的開發(fā)環(huán)境及開發(fā)技術(shù)。第三章是系統(tǒng)需求分析與前臺(tái)設(shè)計(jì),闡述了在系統(tǒng)開發(fā)前的分析工作、系統(tǒng)的整體設(shè)計(jì)以及數(shù)據(jù)庫設(shè)計(jì)。第四章是系統(tǒng)的詳細(xì)設(shè)計(jì)與功能實(shí)現(xiàn)。第五章總結(jié)和展望,對(duì)整個(gè)項(xiàng)目的過程和感悟進(jìn)行總結(jié),并對(duì)項(xiàng)目未來的開發(fā)做出展望。

第一章緒論1.1研究背景天氣是和人們的日常生活密不可分的一個(gè)話題,它關(guān)乎大家的日常出行、工作生活等方方面面。因此就要求我們能夠?qū)ξ磥淼奶鞖庥幸欢ǖ念A(yù)測(cè)來相應(yīng)的安排我們的工作與生活,于是天氣預(yù)報(bào)就應(yīng)運(yùn)而生。天氣預(yù)報(bào)就是對(duì)未來時(shí)期內(nèi)的天氣變化的預(yù)先估計(jì)和報(bào)告。他是根據(jù)大氣科學(xué)的基本理論和技術(shù)對(duì)每一地區(qū)的未來天氣做出分析和預(yù)測(cè),這是大氣科學(xué)為國民經(jīng)濟(jì)建設(shè)和提升人民生活服務(wù)的重要手段,準(zhǔn)確及時(shí)的天氣預(yù)報(bào)對(duì)于經(jīng)濟(jì)建設(shè)和國防建設(shè)的趨利避害、保障人民生命財(cái)產(chǎn)安全等有極大的社會(huì)和經(jīng)濟(jì)效益。但是由于大氣過程的混亂以及當(dāng)今科學(xué)并沒有最終透徹的了解大氣過程,因此天氣預(yù)報(bào)總是有一定的誤差。既然天氣關(guān)系到人們的日常生活,而且如今氣象學(xué)上也有了能夠較為準(zhǔn)確的預(yù)測(cè)天氣的技術(shù),那為了進(jìn)一步方便人們的工作生活及時(shí)獲取天氣信息也變得十分重要,移動(dòng)端的天氣預(yù)報(bào)軟件便被開發(fā)出來了。天氣預(yù)報(bào)軟件是一種非常簡(jiǎn)單實(shí)用的信息服務(wù)軟件。它方便易用且功能強(qiáng)大,能夠提供各方面天氣相關(guān)信息和貼心的出行建議等。目前國內(nèi)基于Android的天氣預(yù)報(bào)軟件相當(dāng)多且發(fā)展水平相當(dāng)。這次課題設(shè)計(jì)的天氣預(yù)報(bào)軟件是一個(gè)操作簡(jiǎn)單、功能完善、界面美觀、手機(jī)資源占用小的軟件。通過這次天氣預(yù)報(bào)軟件的設(shè)計(jì)將自己學(xué)習(xí)到的知識(shí)運(yùn)用到解決生活中遇到的實(shí)際問題當(dāng)中去,充分了解一個(gè)安卓程序的開發(fā)的所有流程,熟練掌握J(rèn)AVA語言和移動(dòng)端軟件開發(fā)方法,將大學(xué)四年所學(xué)的知識(shí)融會(huì)貫通。本次課題的研究希望能夠通過天氣預(yù)報(bào)軟件的開發(fā)進(jìn)一步的擴(kuò)大氣象信息的覆蓋面,讓廣大人民能夠在第一時(shí)間方便快捷地獲取最新的氣象預(yù)報(bào)信息,以便能夠提前預(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í)性作用。1.2設(shè)計(jì)目標(biāo)應(yīng)設(shè)計(jì)一個(gè)實(shí)用穩(wěn)定的天氣預(yù)報(bào)系統(tǒng),在比較廉價(jià)的前提下使其能滿足大部分用戶的需求。針對(duì)上述要求,本設(shè)計(jì)應(yīng)滿足如下條件:

(1)系統(tǒng)能及時(shí)反饋指定預(yù)報(bào)城市的天氣情況;

(2)可以進(jìn)行對(duì)使用者需要的城市天氣進(jìn)行查詢;

(3)節(jié)省流量開銷,按指定的時(shí)間間隔更新天氣,其它時(shí)段則顯示緩存的天氣;

(4)操作方便快捷,界面設(shè)計(jì)美觀大方;1.3本文結(jié)構(gòu)本文的章節(jié)安排如下:第一章緒論部分,說明本文的研究背景和設(shè)計(jì)目標(biāo)。為接下來的系統(tǒng)后臺(tái)的分析與設(shè)計(jì)做基礎(chǔ)準(zhǔn)備。第二章背景技術(shù),簡(jiǎn)單介紹系統(tǒng)實(shí)現(xiàn)所用到的平臺(tái)與技術(shù)。如JavaSDK、Eclipse、AndroidSDK、ADT、SQLite等第三章系統(tǒng)分析與設(shè)計(jì),對(duì)系統(tǒng)進(jìn)行需求分析,根據(jù)需求分析設(shè)計(jì)相應(yīng)的功能與表結(jié)構(gòu)。第四章系統(tǒng)實(shí)現(xiàn),給出系統(tǒng)后臺(tái)的具體實(shí)現(xiàn),包括實(shí)現(xiàn)效果和核心代碼說明。第五章總結(jié)與展望,對(duì)本文所做的工作進(jìn)行總結(jié),并針對(duì)目前工作中的不足對(duì)未來工作的展望。

第二章系統(tǒng)開發(fā)環(huán)境與技術(shù)2.1系統(tǒng)開發(fā)環(huán)境簡(jiǎn)言之,需要以下軟件,才能搭建Android開發(fā)環(huán)境,從而進(jìn)行Android應(yīng)用程序的開發(fā)。(1)JavaSDK(2)AndroidSDK(3)AndroidStudio(4)SQlite2.1.1SQlite介紹SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比如Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。SQLite第一個(gè)Alpha版本誕生于2000年5月。至今已經(jīng)有12個(gè)年頭,SQLite也迎來了一個(gè)版本SQLite3已經(jīng)發(fā)布。不像常見的客戶-服務(wù)器范例,SQLite引擎不是個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要部分。所以主要的通信協(xié)議是在編程語言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上有積極的作用。整個(gè)數(shù)據(jù)庫(定義、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文件中。它的簡(jiǎn)單的設(shè)計(jì)是通過在開始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的[9]。2.1.2SQlite特性(1)比一些流行的數(shù)據(jù)庫在大部分普通數(shù)據(jù)庫操作要快(2)簡(jiǎn)單,輕松的API(3)包含TCL綁定,同時(shí)通過Wrapper支持其他語言的綁定(4)良好注釋的源代碼,并且有著90%以上的測(cè)試覆蓋率(5)獨(dú)立:沒有額外依賴(6)Source完全的Open,你可以用于任何用途,包括出售它(7)支持多種開發(fā)語言,C,PHP,Perl,Java,C#,Python,Ruby2.1.3SQlite功能SQLite雖然很小巧,但是支持的SQL語句不會(huì)遜色于其他開源數(shù)據(jù)庫,它支持的SQL包括:ATTACHDATABASEBEGINTRANSACTIONCOMMENTCOMMITTRANSACTION等等。同時(shí)它還支持事務(wù)處理功能等等。也有人說它像Microsoft的Access,有時(shí)候真的覺得有點(diǎn)像,但是事實(shí)上它們區(qū)別很大。比如SQLite支持跨平臺(tái),操作簡(jiǎn)單,能夠使用很多語言直接創(chuàng)建數(shù)據(jù)庫,而不像Access一樣需要Office的支持。如果你是個(gè)很小型的應(yīng)用,或者你想做嵌入式開發(fā),沒有合適的數(shù)據(jù)庫系統(tǒng),那么你可以考慮使用SQLite。2.1.4SQlite類型SQLite的數(shù)據(jù)類型,首先你會(huì)接觸到一個(gè)讓你驚訝的名詞:Typelessness(無類型)。對(duì)!SQLite是無類型的.這意味著你可以保存任何類型的數(shù)據(jù)到你所想要保存的任何表的任何列中,無論這列聲明的數(shù)據(jù)類型是什么(只有在一種情況下不是,稍后解釋)。對(duì)于SQLite來說對(duì)字段不指定類型是完全有效的。如:CreateTableex1(a,b,c);誠然SQLite允許忽略數(shù)據(jù)類型,但是仍然建議在你的CreateTable語句中指定數(shù)據(jù)類型。因?yàn)閿?shù)據(jù)類型對(duì)于你和其他的程序員交流,或者你準(zhǔn)備換掉你的數(shù)據(jù)庫引擎時(shí)能起到個(gè)提示或幫助的作用[11]。2.2系統(tǒng)開發(fā)技術(shù)本軟件是基于andriod的手機(jī)天氣預(yù)報(bào)系統(tǒng)。首先天氣預(yù)報(bào)功能是調(diào)用國家氣象局的免費(fèi)接口:本軟件使用到的中國國家氣象局天氣預(yù)報(bào)接口總共有兩個(gè):/data/sk/101010100.html/data/101010100.html上面url中的101010100是城市代碼,這里是北京的城市代碼。只需要改變城市代碼,就可以得到所在城市的天氣信息。在瀏覽器上輸入url:/data/sk/101010100.html得到信息,天氣信息是json的數(shù)據(jù)格式。第一個(gè)接口主要是獲取當(dāng)天天氣的具體信息,實(shí)時(shí)溫度信息。第二個(gè)接口主要是獲取當(dāng)天及未來幾天的粗略天氣信息。2.2.1json數(shù)據(jù)解析:JavaScriptObjectNotation,但是獨(dú)立于語言。類似XML,可以用來文本信息的存儲(chǔ)和J交換,是數(shù)據(jù)的載體。從天氣預(yù)報(bào)接口獲得天氣信息時(shí)需要對(duì)天氣進(jìn)行解析,解析出自己需要的天氣信息。2.2.2Handler:Handler:主要接受子線程發(fā)送的數(shù)據(jù),并用此數(shù)據(jù)配合主線程更新UI.當(dāng)應(yīng)用程序啟動(dòng)時(shí),Android首先會(huì)開啟一個(gè)主線程(也就是UI線程),主線程為管理界面中的UI控件,進(jìn)行事件分發(fā),比如說,要是點(diǎn)擊一個(gè)Button,Android會(huì)分發(fā)事件到Button上來響應(yīng)操作。如果此時(shí)需要一個(gè)耗時(shí)的操作,例如:聯(lián)網(wǎng)讀取數(shù)據(jù),或者讀取本地較大的一個(gè)文件的時(shí)候,不能把這些操作放在主線程中,如果放在主線程中的話,界面會(huì)出現(xiàn)假死現(xiàn)象,如果5秒鐘還沒有完成的話,會(huì)收到Android系統(tǒng)的一個(gè)錯(cuò)誤提示“強(qiáng)制關(guān)閉”。這個(gè)時(shí)候需要把這些耗時(shí)的操作,放在一個(gè)子線程中,因?yàn)樽泳€程涉及到UI更新,Android主線程是線程不安全的,也就是說,更新UI只能在主線程中更新,子線程中操作是危險(xiǎn)的。這個(gè)時(shí)候,Handler就可以解決這個(gè)問題,由于Handler運(yùn)行在主線程中(UI線程中),它與子線程可以通過Message對(duì)象來傳遞數(shù)據(jù),Handler就承擔(dān)著接受子線程傳過來的(子線程用sedMessage)方法傳弟)Message對(duì)象,(里面包含數(shù)據(jù)),把這些消息放入主線程隊(duì)列中,配合主線程進(jìn)行更新UI。Handler可以分發(fā)Message對(duì)象和Runnable對(duì)象到主線程中,每個(gè)Handler實(shí)例,都會(huì)綁定到創(chuàng)建他的線程中(一般是位于主線程),它有兩個(gè)作用:安排消息或Runnable在某個(gè)主線程中某個(gè)地方執(zhí)行;安排一個(gè)動(dòng)作在不同的線程中執(zhí)行。第三章系統(tǒng)概要分析3.1系統(tǒng)需求分析設(shè)計(jì)完成一個(gè)實(shí)用穩(wěn)定的天氣預(yù)報(bào)系統(tǒng),同時(shí)要廉價(jià)使其能滿足大部分用戶的需求,因此針對(duì)上述要本設(shè)計(jì)應(yīng)滿足:(1)加載界面程序開始運(yùn)行時(shí)顯示加載界面,此界面是應(yīng)用程序最先展現(xiàn)的窗口,應(yīng)盡量保持界面信息簡(jiǎn)潔。(2)天氣顯示界面顯示指定城市三天內(nèi)的天氣狀況,包括日期、城市名稱、溫度、風(fēng)力與當(dāng)日的建議,用戶可通過按菜單鍵來顯示更新當(dāng)前天氣與設(shè)置天氣顯示的界面背景,以及跳轉(zhuǎn)至設(shè)置預(yù)報(bào)城市界面來更換預(yù)報(bào)城市。(3)預(yù)報(bào)城市設(shè)置由用戶通過可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫中預(yù)存的城市來進(jìn)行設(shè)置,同時(shí)為了方便用戶查找,支持以輸入框的形式來過濾查詢預(yù)報(bào)城市。當(dāng)單擊選中城市時(shí)跳轉(zhuǎn)至天氣顯示界面,來顯示該城市三天內(nèi)的天氣狀況;在天氣界面用戶可通過菜單鍵選擇城市,更新天氣與更換背景,第一次運(yùn)行時(shí)自動(dòng)跳到該界面。3.2性能需求分析為了保證軟件能夠長期、安全、穩(wěn)定、可靠、高效地在Android設(shè)備上運(yùn)行,本系統(tǒng)應(yīng)該滿足以下原則。1.實(shí)用性原則該軟件充分利用手機(jī)的網(wǎng)絡(luò),為本軟件提供信息支持,在簡(jiǎn)潔實(shí)用的基礎(chǔ)上對(duì)軟件界面層級(jí)進(jìn)行布局。2.可擴(kuò)展性與可維護(hù)性原則系統(tǒng)設(shè)計(jì)盡可能模塊化、組件化。有一個(gè)較好的應(yīng)用平臺(tái)——Android設(shè)備,能容易地安裝和卸載。3.安全可靠性原則本軟件是基于手機(jī)設(shè)備使用的,不會(huì)殘留用戶任何的隱私信息。4.用戶界面美觀原則界面經(jīng)過對(duì)用戶心理的調(diào)研并參考時(shí)下流行的軟件風(fēng)格進(jìn)行設(shè)計(jì),加入了對(duì)用戶具有誘導(dǎo)性的按鍵設(shè)計(jì)。5.準(zhǔn)確性原則本軟件的核心技術(shù)是通過與互聯(lián)網(wǎng)上提供的接口進(jìn)行交互,保證了信息的準(zhǔn)確性。6.易用性原則本軟件平易近人,不需要額外學(xué)習(xí),每個(gè)界面都會(huì)有不同含義的圖標(biāo)進(jìn)行提示下一步操作,保證用戶使用時(shí)不會(huì)感到迷惑。3.3系統(tǒng)前臺(tái)簡(jiǎn)要設(shè)計(jì)概述該圖3-3表示前臺(tái)頁面主菜單結(jié)構(gòu)圖:圖3-3前臺(tái)頁面主菜單3.4系統(tǒng)用例圖圖3-2總體用例圖圖3-2-1選擇城市用例圖圖3-2-2查詢天氣信息用例圖圖3-2-3分享天氣信息用例圖圖3-2-4查詢更多信息用例圖3.5系統(tǒng)設(shè)計(jì)在這個(gè)系統(tǒng)中,總體結(jié)構(gòu)可以用結(jié)構(gòu)模塊圖表示出來,根據(jù)需求分析可以將系統(tǒng)分為以下兩個(gè)模塊:天氣模塊和城市模塊,各個(gè)模塊緊密聯(lián)系,各個(gè)模塊本身又是獨(dú)立的,有自己的邏輯。如圖3-5所示是系統(tǒng)的總體結(jié)構(gòu)模塊圖,根據(jù)需求分析中對(duì)系統(tǒng)的功能進(jìn)行分析,以及業(yè)務(wù)流程的分析可以得出這個(gè)系統(tǒng)的大概整體結(jié)構(gòu),以及其中的各個(gè)子模塊。從系統(tǒng)的主界面開始,可以看到系統(tǒng)結(jié)構(gòu)的頂層圖有兩個(gè)模塊(天氣模塊和城市模塊),再依據(jù)各個(gè)主模塊功能進(jìn)行分解,逐步劃分出各個(gè)功能子模塊,從而得出清晰的結(jié)構(gòu)模塊圖,對(duì)系統(tǒng)的實(shí)現(xiàn)邏輯有很大的幫助。圖3-5系統(tǒng)總體結(jié)構(gòu)模塊圖3.6系統(tǒng)流程本系統(tǒng)的流程比較清晰,首先天氣數(shù)據(jù)每更新一次,系統(tǒng)就會(huì)通過HTTP向指定的地址發(fā)出數(shù)據(jù)請(qǐng)求,若請(qǐng)求成功,則返回天氣數(shù)據(jù)并通過JSON格式來解析數(shù)據(jù),最終把解析到的數(shù)據(jù)顯示在手機(jī)界面上。這樣就完成了一次天氣數(shù)據(jù)的更新,這一過程的流程圖如圖3-6所示:圖3-6系統(tǒng)流程圖圖3-6-1選擇城市流程圖圖3-6-2查詢天氣信息流程圖圖3-6-3分享天氣信息流程圖圖3-6-4查詢更多信息流程圖3.7數(shù)據(jù)庫設(shè)計(jì)3.7.1數(shù)據(jù)庫概念設(shè)計(jì)圖3-7-1天氣信息E-R圖圖3-7-2省份E-R圖圖3-7-3城市E-R圖圖3-7-4地區(qū)E-R圖3.7.2數(shù)據(jù)庫邏輯設(shè)計(jì)本軟件選擇SQLite數(shù)據(jù)庫作為數(shù)據(jù)存儲(chǔ)的載體,建立數(shù)據(jù)庫forecast.db,此數(shù)據(jù)庫記錄查詢城市的天氣信息,用戶請(qǐng)求天氣接口后將數(shù)據(jù)保存到本地,以便在無網(wǎng)的時(shí)候展示,建立一個(gè)info表數(shù)據(jù)庫建立的info表如下:數(shù)據(jù)庫字段字段名數(shù)據(jù)類型名稱_idInteger城市ID(primarykey)cityvarchar城市名contenttext天氣詳情第四章系統(tǒng)詳細(xì)設(shè)計(jì)與功能實(shí)現(xiàn)4.1系統(tǒng)項(xiàng)目的文件夾結(jié)構(gòu)為了使代碼文件結(jié)構(gòu)更加清晰,工程設(shè)置了多個(gè)命名空間,分別保存了用戶界面、常用類庫和實(shí)體多個(gè)包Adapter適配器功能Base向數(shù)據(jù)庫請(qǐng)求獲取數(shù)據(jù)Bean應(yīng)用實(shí)體Citymanager城市管理DB數(shù)據(jù)管理Utiljava集成包,里面包含事件模型、日期、時(shí)間設(shè)置、遺留的collections類Layout各個(gè)界面UI設(shè)計(jì)Mipmap存放各種小圖標(biāo)、背景圖片Values各種參數(shù)統(tǒng)一定值4.2啟動(dòng)界面顯示城市當(dāng)前的實(shí)時(shí)天氣狀況,包括城市名稱、城市名片、天氣狀況、溫度高低、星期、風(fēng)力、預(yù)測(cè)未來天氣、24小時(shí)預(yù)報(bào),風(fēng)力等級(jí)等信息,同時(shí)界面下方有生活指數(shù)信息提供出行建議activity_main.xml<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"android:id="@+id/main_out_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#88000000"><ImageViewandroid:id="@+id/bing_pic_img"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="centerCrop"android:src="@mipmap/night"/><Buttonandroid:id="@+id/btn_cut"android:layout_width="30dp"android:layout_height="30dp"android:scaleType="centerCrop"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:background="@mipmap/share"/><ImageViewandroid:clickable="true"android:id="@+id/main_share_weather"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:visibility="gone"android:src="@mipmap/share"/><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="42dp"android:layout_alignParentTop="true"android:visibility="gone"></RelativeLayout><RelativeLayoutandroid:id="@+id/main_bottom_layout"android:layout_width="match_parent"android:layout_height="42dp"android:background="#66000000"android:layout_alignParentBottom="true"><ImageViewandroid:id="@+id/main_iv_add"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="10dp"android:src="@mipmap/city_icon"/><ImageViewandroid:id="@+id/main_iv_more"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:src="@mipmap/menu"/><LinearLayoutandroid:id="@+id/main_layout_point"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:orientation="horizontal"></LinearLayout></RelativeLayout><androidx.viewpager.widget.ViewPagerandroid:id="@+id/main_vp"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@id/main_bottom_layout"></androidx.viewpager.widget.ViewPager></RelativeLayout>fragment_city_weather.xml<?xmlversion="1.0"encoding="utf-8"?><ScrollViewxmlns:android="/apk/res/android"android:id="@+id/out_layout"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/frag_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#33000000"android:orientation="vertical"><ImageViewandroid:id="@+id/bing_pic_img"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="centerCrop"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#66000000"android:orientation="vertical"><TextViewandroid:id="@+id/frag_tv_city"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="2dp"android:text="南昌"android:textColor="@color/main_background"android:textSize="22sp"/><TextViewandroid:id="@+id/frag_tv_date"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="2019-11-05"android:textColor="@color/main_background"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="80dp"android:gravity="left"><TextViewandroid:id="@+id/frag_tv_currenttemp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom"android:layout_marginLeft="20dp"android:text="29°"android:textColor="@color/main_background"android:textSize="80sp"/><TextViewandroid:id="@+id/frag_tv_condition"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom"android:text="多云"android:textColor="@color/main_background"android:textSize="25sp"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_marginBottom="10dp"><TextViewandroid:id="@+id/frag_tv_wind"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="12dp"android:drawableLeft="@mipmap/icon_wind"android:drawablePadding="2dp"android:text="西南風(fēng)2級(jí)"android:textColor="@color/main_background"android:textSize="17sp"/><TextViewandroid:id="@+id/frag_tv_humidity"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="12dp"android:drawableLeft="@mipmap/icon_humidity"android:drawablePadding="2dp"android:text="濕度75%"android:textColor="@color/main_background"android:textSize="17sp"/><TextViewandroid:id="@+id/frag_tv_temprange"android:layout_width="wrap_content"android:layout_height="wrap_content"android:drawableLeft="@mipmap/icon_pressure"android:drawablePadding="2dp"android:text="氣壓1002hPa"android:textColor="@color/main_background"android:textSize="17sp"/></LinearLayout><TextViewandroid:id="@+id/frag_tv_tips"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_margin="10dp"android:text="天暗下來,你就是陽光~"android:textSize="20sp"android:visibility="gone"/></LinearLayout><!--兵哥24小時(shí)預(yù)報(bào)--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/frag_bg"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="24小時(shí)預(yù)報(bào)"android:textColor="@color/main_background"android:textSize="16sp"android:textStyle="bold"/><Viewandroid:layout_width="match_parent"android:layout_height="0.3dp"android:background="@color/main_background"/><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="5dp"/></LinearLayout><!--兵哥用于顯示未來七天的天氣情況--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/frag_bg"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="未來三天"android:textColor="@color/main_background"android:textSize="16sp"android:textStyle="bold"/><Viewandroid:layout_width="match_parent"android:layout_height="0.3dp"android:background="@color/main_background"/><!--顯示七天的線性布局--><LinearLayoutandroid:id="@+id/frag_center_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="10dp"></LinearLayout></LinearLayout><!--用于表示指數(shù)信息的線性布局--><LinearLayoutandroid:id="@+id/frag_index_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/frag_bg"android:orientation="vertical"><TextViewstyle="@style/indextext"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="left"android:padding="10dp"android:text="生活指數(shù)"/><Viewandroid:layout_width="match_parent"android:layout_height="0.3dp"android:background="@color/main_background"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="16dp"><TextViewandroid:id="@+id/frag_index_tv_dress"style="@style/indextext"android:drawableTop="@mipmap/icon_cloth1"android:text="穿衣炎熱"/><TextViewandroid:id="@+id/frag_index_tv_washcar"style="@style/indextext"android:drawableTop="@mipmap/xicar"android:text="洗車不宜"/><TextViewandroid:id="@+id/frag_index_tv_cold"style="@style/indextext"android:drawableTop="@mipmap/cold"android:text="感冒易發(fā)"/></LinearLayout><!--<ImageViewandroid:layout_width="match_parent"android:layout_height="2dp"android:background="#2E8B57"/>--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="18dp"><TextViewandroid:id="@+id/frag_index_tv_sport"style="@style/indextext"android:drawableTop="@mipmap/sports"android:text="運(yùn)動(dòng)較不宜"/><TextViewandroid:id="@+id/frag_index_tv_rays"style="@style/indextext"android:drawableTop="@mipmap/light1"android:text="紫外線強(qiáng)"/><TextViewandroid:id="@+id/frag_index_tv_umbrella"style="@style/indextext"android:drawableTop="@mipmap/icon_yusan"android:text="雨傘不帶傘"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="16dp"><TextViewandroid:id="@+id/frag_index_tv_fish"style="@style/indextext"android:drawableTop="@mipmap/ico_fish"android:text="釣魚較不宜"/><TextViewandroid:id="@+id/frag_index_tv_traffic"style="@style/indextext"android:drawableTop="@mipmap/icon_traffic"android:text="交通較不宜"/><TextViewandroid:id="@+id/frag_index_tv_tourism"style="@style/indextext"android:drawableTop="@mipmap/icon_tourism"android:text="旅游較不宜"/></LinearLayout></LinearLayout></LinearLayout></ScrollView>privatevoidparseShowData(Stringresult)throwsParseException{//使用gson解析數(shù)據(jù)WeatherBeanweatherBean=newGson().fromJson(result,WeatherBean.class);WeatherBean.DataBeanresultsBean=weatherBean.getData();index=resultsBean.getIndex();//設(shè)置TextViewcityTv.setText(city);tipTv.setText(resultsBean.getTips().getObserve().get_$0());//獲取今日天氣情況WeatherBean.DataBean.ObserveBeantodayDataBean=resultsBean.getObserve();//獲取天氣圖標(biāo)代碼/*Stringweather_code=todayDataBean.getWeather_code();StringimgUrl="/pingjs/ext2020/weather/pc/icon/currentweather/day/"+weather_code+".png";Glide.with(this.getActivity()).load(imgUrl).into(dayIv);*///兵clothIndexTv,//carIndexTv,coldIndexTv,sportIndexTv,raysIndexTv,tipTv,umbrellaTv,fishTv,traffic,lunarclothIndexTv.setText("穿衣"+index.getClothes().getInfo());coldIndexTv.setText("感冒"+index.getCold().getInfo());sportIndexTv.setText("運(yùn)動(dòng)"+index.getSports().getInfo());raysIndexTv.setText("紫外線"+index.getUltraviolet().getInfo());umbrellaTv.setText("雨傘"+index.getUmbrella().getInfo());fishTv.setText("釣魚"+index.getFish().getInfo());traffic.setText("交通"+index.getTraffic().getInfo());carIndexTv.setText("洗車"+index.getCarwash().getInfo());tourism.setText("旅游"+index.getTourism().getInfo());Stringtime=changeTime(todayDataBean.getUpdate_time());dateTv.setText("發(fā)布時(shí)間"+time);windTv.setText(resultsBean.getForecast_24h().get_$1().getDay_wind_direction()+""+todayDataBean.getWind_power()+"級(jí)");humidityTv.setText("濕度"+todayDataBean.getHumidity()+"%");tempRangeTv.setText("氣壓"+todayDataBean.getPressure()+"hPa");conditionTv.setText(todayDataBean.getWeather_short());//獲取實(shí)時(shí)天氣溫度情況,需要處理字符串tempTv.setText(todayDataBean.getDegree()+"°");//獲取未來三天的天氣情況,加載到layout當(dāng)中WeatherBean.DataBean.Forecast24hBeanfutureList=resultsBean.getForecast_24h();//================今天ViewitemView=LayoutInflater.from(getActivity()).inflate(R.layout.item_main_center,null);itemView.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));futureLayout.addView(itemView);TextViewidateTv=itemView.findViewById(R.id.item_center_tv_date);TextViewiconTv=itemView.findViewById(R.id.item_center_tv_con);TextViewitemprangeTv=itemView.findViewById(R.id.item_center_tv_temp);TextViewwind=itemView.findViewById(R.id.item_center_tv_winddirection);//獲取對(duì)應(yīng)的位置的天氣情況idateTv.setText(futureList.get_$1().getTime().substring(5).replace("-","/")+""+"今天");iconTv.setText(futureList.get_$1().getDay_weather());wind.setText(futureList.get_$1().getDay_wind_direction());itemprangeTv.setText(futureList.get_$1().getMin_degree()+"~"+futureList.get_$1().getMax_degree()+"°C");//================今天ViewitemView0=LayoutInflater.from(getActivity()).inflate(R.layout.item_main_center,null);itemView.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));futureLayout.addView(itemView0);TextViewidateTv0=itemView0.findViewById(R.id.item_center_tv_date);TextViewiconTv0=itemView0.findViewById(R.id.item_center_tv_con);TextViewitemprangeTv0=itemView0.findViewById(R.id.item_center_tv_temp);TextViewwind0=itemView0.findViewById(R.id.item_center_tv_winddirection);//獲取對(duì)應(yīng)的位置的天氣情況idateTv0.setText(futureList.get_$2().getTime().substring(5).replace("-","/")+""+DateUtil.dateToWeek(futureList.get_$2().getTime()));iconTv0.setText(futureList.get_$2().getDay_weather());wind0.setText(futureList.get_$2().getDay_wind_direction());itemprangeTv0.setText(futureList.get_$2().getMin_degree()+"~"+futureList.get_$2().getMax_degree()+"°C");ViewitemView3=LayoutInflater.from(getActivity()).inflate(R.layout.item_main_center,null);itemView.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));futureLayout.addView(itemView3);TextViewidateTv3=itemView3.findViewById(R.id.item_center_tv_date);TextViewiconTv3=itemView3.findViewById(R.id.item_center_tv_con);TextViewitemprangeTv3=itemView3.findViewById(R.id.item_center_tv_temp);TextViewwind3=itemView3.findViewById(R.id.item_center_tv_winddirection);//獲取對(duì)應(yīng)的位置的天氣情況idateTv3.setText(futureList.get_$3().getTime().substring(5).replace("-","/")+""+DateUtil.dateToWeek(futureList.get_$3().getTime()));iconTv3.setText(futureList.get_$3().getDay_weather());

溫馨提示

  • 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)論