版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 河北農(nóng)業(yè)大學(xué)</b></p><p> 本科畢業(yè)論文(設(shè)計(jì))</p><p> 題 目: 基于android系統(tǒng)的天氣預(yù)報(bào)查詢(xún)系統(tǒng) </p><p> 學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 </p><p> 專(zhuān)業(yè)班級(jí): 計(jì)算機(jī)專(zhuān)升本1101班 </p><p
2、> 學(xué) 號(hào): 2011232010130 </p><p> 學(xué)生姓名: 田燕玲 </p><p> 指導(dǎo)教師姓名: 趙洋 </p><p> 指導(dǎo)教師職稱(chēng): 副教授 </p><p> 2013 年 6 月 1 日&l
3、t;/p><p><b> 摘 要</b></p><p> 近幾年來(lái)隨著3G技術(shù)成熟和智能手機(jī)的不斷普及,移動(dòng)應(yīng)用的需求與日俱增,移動(dòng)應(yīng)用開(kāi)發(fā)成為當(dāng)下最熱門(mén)的技術(shù)之一。在Google和Android手機(jī)聯(lián)盟的共同推動(dòng)下,Android在眾多移動(dòng)應(yīng)用開(kāi)發(fā)平臺(tái)中脫穎而出。Android是一個(gè)真正意義上的開(kāi)源智能手機(jī)操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動(dòng)設(shè)備廠商和
4、開(kāi)發(fā)者的熱捧,手機(jī)已被賦予了除通話以外的其它許多功能。全新的手機(jī)軟件領(lǐng)域已逐漸聚焦了眾多軟件開(kāi)發(fā)商的目光,軟件開(kāi)發(fā)者和軟件用戶(hù)將共同面臨這個(gè)振奮人心的新境界。 </p><p> 本設(shè)計(jì)使用Android設(shè)計(jì)技術(shù)開(kāi)發(fā)了一種運(yùn)用在Android系統(tǒng)上的手機(jī)天氣預(yù)報(bào)軟件系統(tǒng),本系統(tǒng)通過(guò)選擇城市來(lái)獲得天氣,風(fēng)向,溫度等信息?;赼ndroid的天氣預(yù)報(bào)系統(tǒng)軟件可以使用戶(hù)對(duì)于各地的天氣情況的實(shí)時(shí)掌握,極大的方便了用戶(hù)
5、的出行和行程安排,避免了不必要的麻煩,具有很強(qiáng)的實(shí)用性。</p><p> 關(guān)鍵詞:天氣預(yù)報(bào)系統(tǒng);android開(kāi)發(fā)</p><p><b> Abstract</b></p><p> In recent years, with the 3G technology matures and the growing popularity o
6、f 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 numer
7、ous mobile application development platforms. Android is a truly open-source smart phone operating system, which once launched immediately by the global mobile device manufacturers and developers blitz, m</p><
8、p> 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, temperature and other info
9、rmation. Android based software allows users to weather forecasting system for real-time weather conditions around the master, a great convenience to the user's travel and travel arrangements, to avoid unnecessary tr
10、ouble, and highly practical.</p><p> Keywords: Weather forecast system; android development</p><p><b> 目 錄</b></p><p><b> 1. 需求分析1</b></p><
11、;p> 1.1 開(kāi)發(fā)背景1</p><p> 1.2 系統(tǒng)研究?jī)?nèi)容1</p><p> 1.3 項(xiàng)目需求分析1</p><p> 2. Google android移動(dòng)平臺(tái)的相關(guān)理論1</p><p> 2.1 Google android 移動(dòng)平臺(tái)的概述1</p><p> 2.1.1 A
12、ndroid系統(tǒng)的特點(diǎn)2</p><p> 2.1.2 Android的功能2</p><p> 2.2 Google android移動(dòng)平臺(tái)開(kāi)發(fā)過(guò)程研究2</p><p> 2.3 Google android移動(dòng)平臺(tái)下的應(yīng)用研究3</p><p><b> 2.4 小結(jié)3</b></p>
13、<p><b> 3. 項(xiàng)目設(shè)計(jì)4</b></p><p> 3.1 項(xiàng)目總體設(shè)計(jì)4</p><p> 3.2 系統(tǒng)功能界面4</p><p> 3.2.1 歡迎界面4</p><p> 3.2.2 設(shè)置所在城市界面5</p><p> 3.2.3 天氣顯示界面
14、6</p><p> 3.2.4 Widget桌面小部件界面7</p><p> 3.3 設(shè)計(jì)目標(biāo)8</p><p><b> 4. 系統(tǒng)設(shè)計(jì)8</b></p><p> 4.1 開(kāi)發(fā)及運(yùn)行環(huán)境8</p><p> 4.2 數(shù)據(jù)庫(kù)設(shè)計(jì)8</p><p>
15、; 4.3 主要方法及步驟8</p><p> 4.4 主要方法及技術(shù)9</p><p><b> 5. 主要模塊9</b></p><p> 5.1 項(xiàng)目框架9</p><p> 5.2 主要功能實(shí)現(xiàn)10</p><p> 5.2.1 導(dǎo)入db_weather.db數(shù)據(jù)庫(kù)文
16、件10</p><p> 5.2.2 實(shí)現(xiàn)城市列表的創(chuàng)建與過(guò)濾11</p><p> 5.2.3 訪問(wèn)網(wǎng)絡(luò)得到天氣信息14</p><p> 5.2.4 Widget窗體小部件的更新15</p><p> 6. 功能測(cè)試17</p><p><b> 結(jié)論21</b><
17、/p><p><b> 參考文獻(xiàn)22</b></p><p> 基于android系統(tǒng)的天氣預(yù)報(bào)查詢(xún)系統(tǒng)</p><p><b> 1. 需求分析</b></p><p><b> 1.1 開(kāi)發(fā)背景</b></p><p> 近幾年來(lái)隨著3G技術(shù)
18、成熟和智能手機(jī)的不斷普及,移動(dòng)應(yīng)用的需求與日俱增,移動(dòng)應(yīng)用開(kāi)發(fā)成為當(dāng)下最熱門(mén)的技術(shù)之一。手機(jī)是已經(jīng)成為了生活中不可少的通讀設(shè)備,沒(méi)有手機(jī)有時(shí)會(huì)讓人覺(jué)得寸步難行,手機(jī)將脫離傳統(tǒng)的打電話,發(fā)短信等基本功能,而基于智能手機(jī)的處理能力和擴(kuò)展能力,基于3G網(wǎng)絡(luò)高速數(shù)據(jù)傳輸,越來(lái)越多的功能和業(yè)務(wù)將被開(kāi)發(fā)出來(lái)并大規(guī)模的應(yīng)用。在Google和Android手機(jī)聯(lián)盟的共同推動(dòng)下,Android在眾多移動(dòng)應(yīng)用開(kāi)發(fā)平臺(tái)中脫穎而出。Android是一個(gè)真正意義
19、上的開(kāi)源智能手機(jī)操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動(dòng)設(shè)備廠商和開(kāi)發(fā)者的熱捧。為順應(yīng)潮流,本設(shè)計(jì)旨在搭載Android的移動(dòng)設(shè)備上運(yùn)行,實(shí)現(xiàn)天氣狀況的實(shí)時(shí)動(dòng)態(tài)更新與顯示,方便人們的出行與生活。</p><p> 1.2 系統(tǒng)研究?jī)?nèi)容</p><p><b> 1. 界面的設(shè)計(jì)</b></p><p><b> 2. 代碼的設(shè)計(jì)
20、</b></p><p><b> 3. 程序的測(cè)試</b></p><p><b> 4. 產(chǎn)品的發(fā)布</b></p><p> 1.3 項(xiàng)目需求分析</p><p> 根據(jù)功能的需求,分析此項(xiàng)目的主要功能應(yīng)具備以下幾點(diǎn):</p><p> 1. 精
21、確查詢(xún)?nèi)珖?guó)各地城市未來(lái)幾天內(nèi)的實(shí)時(shí)天氣狀況</p><p> 2. 系統(tǒng)要具有實(shí)用性,符合用戶(hù)查看信息習(xí)慣,界面設(shè)計(jì)優(yōu)美</p><p> 3. 系統(tǒng)要具有穩(wěn)定性,且在一定程度上節(jié)省流量的開(kāi)銷(xiāo)</p><p> 2. Google android移動(dòng)平臺(tái)的相關(guān)理論</p><p> 2.1 Google android 移動(dòng)平臺(tái)的概述
22、</p><p> Android 是 Google公司于07年11月5日宣布的基于LINUX平臺(tái)開(kāi)源手機(jī)操作系統(tǒng),該平臺(tái)由操作系統(tǒng),中間件,用戶(hù)界面和應(yīng)用軟件組成,Android是Google開(kāi)發(fā)的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)。它包括操統(tǒng),用戶(hù)界面和應(yīng)用程序----移動(dòng)電話工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專(zhuān)有權(quán)障礙,谷歌與開(kāi)放手機(jī)聯(lián)盟合作開(kāi)發(fā)了Android,這個(gè)聯(lián)盟由包括中國(guó)
23、移動(dòng),摩托羅拉,高通,宏達(dá)在內(nèi)的30多家技術(shù)和無(wú)線應(yīng)用的領(lǐng)軍企業(yè)組成。通過(guò)與運(yùn)營(yíng)商,設(shè)備制造商,開(kāi)發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化,開(kāi)放式的移動(dòng)電話軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開(kāi)放式生態(tài)系統(tǒng)。</p><p> 2.1.1 Android系統(tǒng)的特點(diǎn)</p><p> 1.開(kāi)放性。Google與開(kāi)放性手機(jī)聯(lián)盟合作開(kāi)發(fā)了android,Google通過(guò)與運(yùn)營(yíng)
24、商,設(shè)備制造商,開(kāi)發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化,開(kāi)放式的移動(dòng)電話軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開(kāi)放式生態(tài)系統(tǒng)。</p><p> 2.應(yīng)用程序無(wú)界限。Android上的應(yīng)用可以通過(guò)標(biāo)準(zhǔn)API訪問(wèn)核心移動(dòng)設(shè)備功能。通過(guò)互聯(lián)網(wǎng),應(yīng)用程序可以聲明它們的功能可提供其它應(yīng)用程序使用。</p><p> 3.應(yīng)用程序是在平等的條件下創(chuàng)建的,移動(dòng)設(shè)備上的應(yīng)用程序可以
25、被替換或擴(kuò)展,即使是撥號(hào)或主屏幕這樣的核心組件。</p><p> 4.應(yīng)用程序可以輕松地嵌入網(wǎng)絡(luò)。應(yīng)用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過(guò)Web view顯示內(nèi)容。</p><p> 5.應(yīng)用程序可以并行運(yùn)行。Android是一種完整的多任務(wù)環(huán)境,應(yīng)用程序可以在其中并行運(yùn)行,在后臺(tái)運(yùn)行時(shí),應(yīng)用程序可以生成通知引起注意。</p><p
26、> 2.1.2 Android的功能</p><p> 1.支持虛擬鍵盤(pán)。虛擬鍵盤(pán)的出現(xiàn)意味著基于Android1.5或以上的版本的移動(dòng)設(shè)備可以同時(shí)支持物理鍵盤(pán)和虛擬鍵盤(pán)。</p><p> 2.使用widget實(shí)現(xiàn)桌面的個(gè)性化??梢杂脀idget修飾自己的桌面。大多數(shù)小的Web應(yīng)用都是從網(wǎng)絡(luò)上獲得實(shí)時(shí)數(shù)據(jù)并展示給用戶(hù)的,android預(yù)裝了Widget,包括數(shù)字時(shí)鐘,日歷,
27、音樂(lè)播放器,相框。</p><p> 3.用在線文件快速瀏覽數(shù)數(shù),類(lèi)似于OSX Leopard的Quick look特征,Android的在線文件夾可顯示的數(shù)據(jù)條目,比如聯(lián)系人,喜歡的應(yīng)用,E-mail信息,播放列表,書(shū)簽,RSS源等,并不需要運(yùn)行系統(tǒng)程序處理特定的數(shù)據(jù)條目。</p><p> 4.視頻錄制和分享。Android還有錄制和分享視頻的功能,對(duì)回放和MPEG-4,3GP等視
28、頻也有了更好的支持。可以通過(guò)E-mail,MMS或直接上傳等方式來(lái)分享視頻。</p><p> 5.更快,更兼容的瀏覽器,Android的基于WebKit內(nèi)核的瀏覽器帶來(lái)了重要的調(diào)速半置,這得益于新的WebKit渲染引擎和優(yōu)化的JAVA腳本編譯器。</p><p> 6.Voice search語(yǔ)音搜索。帶有語(yǔ)音識(shí)別技術(shù)的Google手機(jī)已于2008年11月面世,它支持語(yǔ)音搜索功能,該
29、功能增強(qiáng)了默認(rèn)的搜索能力,已超過(guò)了純文本搜索。</p><p> 7.立體藍(lán)牙和免提電話。除了增強(qiáng)的免提電話體驗(yàn),Android還支持立體藍(lán)牙(A2Dphe和AVCRP),并有自動(dòng)配對(duì)功能。</p><p> 8.強(qiáng)大的GPS技術(shù).Android內(nèi)部提供了大量的GPS組件,我們可以很輕松地獲得設(shè)備當(dāng)前的位置等信息,讓導(dǎo)航等功能更加完善。</p><p> 9.
30、Android系統(tǒng)硬件檢測(cè),android可自動(dòng)檢測(cè)和修復(fù)SD卡的文件系統(tǒng),允許第三方應(yīng)用顯示Android系統(tǒng)的硬件特征,為了讓用戶(hù)下載到與自己的設(shè)備匹配的應(yīng)用,我們可以檢測(cè)用戶(hù)設(shè)備的硬件信息,讓滿足應(yīng)用要求的設(shè)備安裝該程序。</p><p> 2.2 Google android移動(dòng)平臺(tái)開(kāi)發(fā)過(guò)程研究</p><p> Android移動(dòng)平臺(tái)作為21世紀(jì)的新秀,受到了越來(lái)越多的開(kāi)發(fā)者
31、的鐘愛(ài),在這股開(kāi)發(fā)的浪潮中,逐漸形成了具有Android一套具有Android特色的開(kāi)發(fā)流程。</p><p> 由于Android的優(yōu)越性,其開(kāi)發(fā)顯得非常的有規(guī)律可尋。大致的開(kāi)發(fā)流程如下:</p><p> 需求分析:作為一個(gè)軟件,它必須有其存在的意義和價(jià)值,而這個(gè)價(jià)值和意義就需要靠需求分析來(lái)確定。</p><p> 功能分析。作為一個(gè)手機(jī)軟件,它的使命就是
32、給用戶(hù)使用的。如何提供用戶(hù)最好的用戶(hù)體驗(yàn)就值得每一個(gè)程序員的深思,這也是確保一個(gè)程序成功的關(guān)鍵所在。</p><p> 界面設(shè)計(jì):作為一個(gè)手機(jī)軟件,其只能在極有限的區(qū)域中顯示,如何在有限的空間里更完美的展現(xiàn)出自己的獨(dú)特之處就顯得更為重要了。</p><p> 測(cè)試:在任何一個(gè)軟件開(kāi)發(fā)行業(yè)中,無(wú)論是J2EE,J2SE,J2ME等等其他開(kāi)發(fā)中,測(cè)試時(shí)必不可少的一環(huán),在Android開(kāi)發(fā)中,
33、由于手機(jī)的高頻率使用,和硬件系統(tǒng)上的不足,使得對(duì)軟件的要求更加的嚴(yán)格,這就要求在開(kāi)發(fā)完成后,再對(duì)其進(jìn)行嚴(yán)格的測(cè)試,而測(cè)試又包括了:?jiǎn)卧獪y(cè)試,系統(tǒng)測(cè)試等方面的測(cè)試。</p><p> 系統(tǒng)開(kāi)發(fā):作為一個(gè)軟件的主體部分,系統(tǒng)開(kāi)發(fā)的好壞直接決定了該系統(tǒng)的性能和壽命。</p><p> 發(fā)布:在完成一個(gè)系統(tǒng)的開(kāi)發(fā)后,就要對(duì)其發(fā)布,經(jīng)過(guò)廣大用戶(hù)的考驗(yàn),只有經(jīng)過(guò)這個(gè)過(guò)程,才算是一個(gè)合格的產(chǎn)品,在A
34、ndroid平臺(tái)中,Google提供了完整的發(fā)布機(jī)制------Google market。</p><p> 2.3 Google android移動(dòng)平臺(tái)下的應(yīng)用研究</p><p> Android系統(tǒng)提供給應(yīng)用開(kāi)發(fā)者本身就是一個(gè)框架,所有的應(yīng)用開(kāi)發(fā)都必須遵守這個(gè)框架原則。我們?cè)陂_(kāi)發(fā)應(yīng)用時(shí)就是在這個(gè)框架上進(jìn)行擴(kuò)展,下面來(lái)看看android這個(gè)框架都有些什么功能可供我們使用。<
35、/p><p> Android.app:提供高層的程序模型和基本的運(yùn)行環(huán)境</p><p> Android.content:包含對(duì)各種設(shè)備上的數(shù)據(jù)進(jìn)行訪問(wèn)和發(fā)布</p><p> Android.database:通過(guò)內(nèi)容提供者瀏覽的操作數(shù)據(jù)庫(kù)</p><p> Android.graphics:圖形庫(kù),包含畫(huà)布,顏色過(guò)濾,點(diǎn),矩形,可
36、以將它們直接繪制到屏幕上。</p><p> Android.location:定位和相關(guān)服務(wù)的類(lèi)</p><p> Android.net: 提供幫助網(wǎng)絡(luò)訪問(wèn)類(lèi),超過(guò)通常的java.net*接口。</p><p> Android.media: 提供一些類(lèi)管理多種音頻,視頻的媒體接口。</p><p> Android.os:提供了
37、系統(tǒng)服務(wù),消息轉(zhuǎn)輸和IPC機(jī)制。</p><p> Android.opngl:提供OpenGL的工具。</p><p> Android.provider:提供訪問(wèn)Android的內(nèi)容提供者的類(lèi)。</p><p> Android.telephony:提供與撥打電話相關(guān)的API交互。</p><p> Android.view提供基
38、礎(chǔ)的用戶(hù)界面接口框架。</p><p> Android.util:涉及工具性的方法,例如時(shí)間日期的操作。</p><p> Addroid.webkit:默認(rèn)瀏覽器操作接口。</p><p> Android.widget包含各種UI元素在應(yīng)用程序的布局中使用。</p><p><b> 2.4 小結(jié)</b>
39、</p><p> 本章主要通過(guò)三個(gè)方面:1.Google android移動(dòng)平臺(tái)的概述:2. Google android移動(dòng)平臺(tái)開(kāi)發(fā)過(guò)程的研究: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í)和了解,為后面的開(kāi)發(fā)做了堅(jiān)實(shí)的基礎(chǔ)。</p><p><b> 3
40、. 項(xiàng)目設(shè)計(jì)</b></p><p> 3.1 項(xiàng)目總體設(shè)計(jì)</p><p> 本軟件是一個(gè)App Widget應(yīng)用程序,啟動(dòng)程序后可以進(jìn)行城市的設(shè)置,可以通過(guò)圖片和文字顯示當(dāng)前和未來(lái)兩天的天氣狀況,包括溫度、風(fēng)向和雨雪情況等。</p><p> 該軟件的基本功能需求有:</p><p><b> 1.歡迎界面&
41、lt;/b></p><p> 系統(tǒng)啟動(dòng)時(shí)首先進(jìn)入歡迎界面;</p><p> 2.啟動(dòng)App Widget應(yīng)用程序</p><p> 為了方便用戶(hù)實(shí)時(shí)了解天氣狀況,特別添加在Android系統(tǒng)桌面上顯示當(dāng)前天氣與時(shí)間的天氣小部件,使用戶(hù)拿起手機(jī)的第一時(shí)刻就能了解天氣,同時(shí)當(dāng)用戶(hù)單擊小部件時(shí),自動(dòng)跳轉(zhuǎn)至天氣顯示界面,顯示三天內(nèi)的詳細(xì)天氣。</p&g
42、t;<p> 3.設(shè)置所在城市界面</p><p> 通過(guò)可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫(kù)中預(yù)存的城市來(lái)進(jìn)行設(shè)置,同時(shí)為了方便用戶(hù)查找,支持以輸入框的形式來(lái)過(guò)濾查詢(xún)預(yù)報(bào)城市。當(dāng)單擊選中城市時(shí)跳轉(zhuǎn)至天氣顯示界面,來(lái)顯示該城市當(dāng)三天內(nèi)的天氣狀況;第一次運(yùn)行時(shí)自動(dòng)跳到該界面。</p><p><b> 4.顯示天氣界面</b></p>&
43、lt;p> 顯示指定城市三天內(nèi)的天氣狀況,包括日期、城市名稱(chēng)、溫度、風(fēng)力與當(dāng)日的建議,用戶(hù)可通過(guò)按菜單鍵來(lái)顯示菜單更新當(dāng)前天氣與設(shè)置天氣顯示的界面背景,以及跳轉(zhuǎn)至設(shè)置預(yù)報(bào)城市界面來(lái)更換預(yù)報(bào)城市。</p><p> 3.2 系統(tǒng)功能界面</p><p> 3.2.1 歡迎界面</p><p> 當(dāng)系統(tǒng)啟動(dòng)時(shí),首先會(huì)顯示歡迎界面。如圖3-1所示:</
44、p><p><b> 圖3-1 歡迎界面</b></p><p> 3.2.2 設(shè)置所在城市界面</p><p> 1.當(dāng)?shù)谝淮芜\(yùn)行程序時(shí),跳轉(zhuǎn)至城市設(shè)置界面進(jìn)行預(yù)報(bào)城市的選擇,如圖3-2所示:</p><p><b> 圖3-2 設(shè)置城市</b></p><p> 2
45、. 用戶(hù)可通過(guò)輸入框過(guò)濾查詢(xún)當(dāng)前系統(tǒng)中預(yù)存的城市,如圖3-3所示:</p><p> 圖3-3 過(guò)濾框輸入選擇城市</p><p> 3.2.3 天氣顯示界面</p><p> 1.選擇了預(yù)報(bào)城市后,系統(tǒng)跳轉(zhuǎn)至天氣顯示界面,顯示該城市三天內(nèi)的實(shí)時(shí)天氣,</p><p><b> 如圖3-4所示: </b><
46、/p><p><b> 圖3-4 顯示天氣</b></p><p> 2. 在天氣界面中用戶(hù)可通過(guò)按菜單鍵來(lái)調(diào)出菜單,設(shè)置城市,更新天氣與更換背景,如圖3-5所示:</p><p><b> 圖3-5 調(diào)出菜單</b></p><p> 3.2.4 Widget桌面小部件界面</p>
47、<p> 方便用戶(hù)第一時(shí)間了解天氣動(dòng)態(tài),添加widget顯示功能界面,如圖3-6所示: </p><p> 圖3-6 Widget桌面小部件</p><p><b> 3.3 設(shè)計(jì)目標(biāo)</b></p><p> 設(shè)計(jì)完成一個(gè)實(shí)用穩(wěn)定的天氣預(yù)報(bào)系統(tǒng),同時(shí)要廉價(jià)使其能滿足大部分用戶(hù)的需求,因此針對(duì)上述要求,本設(shè)計(jì)應(yīng)滿足:<
48、;/p><p> 1.系統(tǒng)能及時(shí)的反饋指定預(yù)報(bào)城市的天氣情況;</p><p> 2. 可設(shè)置所在城市,自行輸入或者列表選擇城市;</p><p> 3.節(jié)省流量開(kāi)銷(xiāo),規(guī)定在指定的時(shí)間間隔內(nèi)才更新天氣,其它時(shí)段顯示緩存的天氣;</p><p> 4.操作方便快捷,使用簡(jiǎn)單,界面設(shè)計(jì)美觀大方,支持widget。</p><
49、;p><b> 4. 系統(tǒng)設(shè)計(jì)</b></p><p> 4.1 開(kāi)發(fā)及運(yùn)行環(huán)境</p><p> 1. JDK1.6.0 _10</p><p> 2. Eclipse3.8</p><p> 3. Android Development Toolkit (ADT) 21.0.1 </p>
50、<p> 4. Android 2.2及以上 </p><p> 5. Windows 7 </p><p><b> 4.2 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p> 由于在本系統(tǒng)中是通過(guò)訪問(wèn)中央氣象臺(tái)提供的天氣信息得到的天氣預(yù)報(bào),在查詢(xún)指定城市的天氣時(shí),需要用到它提供的城市碼,而城市碼相對(duì)穩(wěn)定不變,所以在構(gòu)建系統(tǒng)時(shí)將其事先通
51、過(guò)Android的網(wǎng)絡(luò)訪問(wèn)技術(shù)將其緩沖到本地SQLite數(shù)據(jù)庫(kù)進(jìn)行保存起來(lái),方便以后的查詢(xún),同時(shí)節(jié)省了流量開(kāi)銷(xiāo)。綜上所述在本地建立db_weather.db的數(shù)據(jù)庫(kù),其中只存在兩個(gè)表: provinces和citys。citys表中存在city_num用天氣的查詢(xún),同時(shí)還存在外鍵province_id與provinces表形成1對(duì)n的關(guān)系。結(jié)構(gòu)如圖4-1所示:</p><p> 圖4-1 數(shù)據(jù)庫(kù)表結(jié)構(gòu)</
52、p><p> 4.3 主要方法及步驟</p><p> 1. 搭建Android開(kāi)發(fā)環(huán)境,并建立名為WeatherForecastSystem項(xiàng)目。</p><p> 2. 在程序第一次運(yùn)行時(shí),將db_weather.db數(shù)據(jù)庫(kù)文件導(dǎo)入到應(yīng)用程序數(shù)據(jù)庫(kù)中。</p><p> 3. 建立設(shè)置城市界面,讀取數(shù)據(jù)庫(kù)文件,獲取省份,城市以及對(duì)應(yīng)的
53、城市碼。</p><p> 4. 接收用戶(hù)選擇的城市碼,訪問(wèn):http://m.weather.com.cn/data/<城市碼>.html得到天氣信息。</p><p> 5. 解析天氣信息,將城市碼及天氣信息緩沖下來(lái),并為其設(shè)置有效時(shí)間,方便下次啟動(dòng)時(shí)直接得到天氣信息,過(guò)期則從網(wǎng)上更新。</p><p> 6. 定時(shí)由保存的城市碼更新天氣信息。
54、</p><p> 4.4 主要方法及技術(shù)</p><p> 1. Android手機(jī)的界面UI設(shè)計(jì)</p><p> 2. Android的網(wǎng)絡(luò)通信</p><p> 3. Android的廣播</p><p> 4. Widget小部件編程</p><p><b> 5
55、. JSON解析</b></p><p> 6. SQLite數(shù)據(jù)庫(kù)操作</p><p> 7. Android文件操作</p><p><b> 5. 主要模塊</b></p><p><b> 5.1 項(xiàng)目框架</b></p><p> 在裝有ADT
56、插件的Eclipse中新建一個(gè)名為WeatherForecastSystem的項(xiàng)目,項(xiàng)目主要文件結(jié)構(gòu)如圖5-1所示:</p><p> 圖5-1 WeatherForecastSystem工程的源代碼文件結(jié)構(gòu)</p><p> 為了使源代碼文件的結(jié)構(gòu)更加清晰,WeatherForecastSystem工程設(shè)置了多個(gè)命名空間,分別用來(lái)保存用戶(hù)界面、數(shù)據(jù)庫(kù)、后臺(tái)服務(wù)和工具實(shí)體的源代碼文件。
57、源代碼文件的名稱(chēng)以及說(shuō)明如表5-1所示。</p><p> 5.2 主要功能實(shí)現(xiàn)</p><p> 5.2.1 導(dǎo)入db_weather.db數(shù)據(jù)庫(kù)文件</p><p> public void importInitDatabase() {</p><p><b> //數(shù)據(jù)庫(kù)的目錄</b></p>
58、<p> String dirPath="/data/data/com.weather.app/databases";</p><p> File dir = new File (dirPath);</p><p> if (!dir.exists()) {</p><p> dir.mkdir ();</p>
59、<p><b> }</b></p><p><b> //數(shù)據(jù)庫(kù)文件</b></p><p> File dbfile = new File(dir, "db_weather.db");</p><p><b> try {</b></p>&l
60、t;p> if(!dbfile.exists()) {</p><p> dbfile.createNewFile();</p><p><b> }</b></p><p> //加載欲導(dǎo)入的數(shù)據(jù)庫(kù)</p><p> InputStream is= this.getApplicationContext(
61、).getResources().openRawResource(R.raw.db_weather);</p><p> FileOutputStream fos = new FileOutputStream(dbfile);</p><p> byte[] buffere=new byte[is.available()];</p><p> is.read(
62、buffere);</p><p> fos.write(buffere);</p><p> is.close();</p><p> fos.close();</p><p> }catch(FileNotFoundException e){</p><p> e.printStackTrace();&
63、lt;/p><p> }catch(IOException e) {</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p> 5.2.2 實(shí)現(xiàn)城市列表的創(chuàng)建與過(guò)濾</
64、p><p> 實(shí)現(xiàn)城市列表是通過(guò)繼承android.widget.BaseExpandableListAdapter適配器實(shí)現(xiàn)的,其中主要實(shí)現(xiàn)它的public View getGroupView()得到列表的一級(jí)列表和public void getChildView()得到列表的二級(jí)子列表實(shí)現(xiàn)的,在這里由于只是實(shí)現(xiàn)文本顯示功能,故用TextView組件來(lái)填充就行了,如果要構(gòu)造這個(gè)自定義的適配器,則只需在提供存放省份
65、直轄市的一級(jí)列表的數(shù)組String[] groups和存放對(duì)應(yīng)的城鎮(zhèn)的二級(jí)列表的String[][] childs就行了。</p><p><b> @Override</b></p><p> public View getChildView(int groupPosition, int childPosition,</p><p>
66、boolean isLastChild, View convertView, ViewGroup parent) {</p><p> TextView textView = null;</p><p> //這里判斷convertView是否為空</p><p> if(convertView==null) {</p><p> /
67、/產(chǎn)生一個(gè)TextView組件</p><p> textView = getGenericView();</p><p> //設(shè)置它的文本內(nèi)容</p><p> textView.setText(getChild(groupPosition,childPosition).toString());</p><p><b>
68、 } else {</b></p><p> textView = (TextView)convertView;</p><p> textView.setText(getChild(groupPosition,childPosition).toString());</p><p><b> }</b></p>
69、<p> return textView;</p><p><b> }</b></p><p><b> @Override</b></p><p> public View getGroupView(int groupPosition, boolean isExpanded,</p>&
70、lt;p> View convertView, ViewGroup parent) {</p><p> TextView textView = null;</p><p> if(convertView==null){</p><p> textView = getGenericView();</p><p> textVi
71、ew.setText(getGroup(groupPosition).toString());</p><p><b> }else {</b></p><p> textView = (TextView)convertView;</p><p> textView.setText(getGroup(groupPosition).toSt
72、ring());</p><p><b> }</b></p><p> return textView;</p><p><b> }</b></p><p> private TextView getGenericView() {</p><p> AbsLis
73、tView.LayoutParams lp = new AbsListView.LayoutParams(</p><p> ViewGroup.LayoutParams.FILL_PARENT, 48);</p><p> TextView textView = new TextView(context);</p><p> textView.setLayo
74、utParams(lp);</p><p> textView.setTextSize(18);</p><p> textView.setTextColor(Color.WHITE);</p><p> textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);</p><p&
75、gt; textView.setPadding(32, 0, 0, 0);</p><p> return textView;</p><p><b> }</b></p><p> 同時(shí)為了兼具過(guò)濾功能,還需再實(shí)現(xiàn)android.widget.Filterable接口,這個(gè)接口有一個(gè)getFilter()返回Filter過(guò)濾器的列表,
76、故還要提供一個(gè)Filter過(guò)濾類(lèi),在本系統(tǒng)中,實(shí)現(xiàn)的是一個(gè)內(nèi)部類(lèi)CityFilter,它繼承android.widget.Filter類(lèi),覆蓋實(shí)現(xiàn)了兩個(gè)方法,一個(gè)是performFiltering()得到FilterResults過(guò)濾結(jié)果對(duì)象方法,另一個(gè)是根據(jù)得到的FilterResults對(duì)象更新適配器的publishResults()方法。</p><p> 其中的performFiltering(Char
77、Sequence constraint)方法的實(shí)現(xiàn)是通過(guò)constraint這個(gè)關(guān)鍵字以省份直轄市為單位進(jìn)行匹配,如果匹配成功,則添加該省份以下的所有城市,如果匹配不成功,則再逐一與這個(gè)省份下的城市匹配,則只添加匹配的城市,其中匹配的結(jié)果放在Map<Integer,ArrayList<Integer>>values這樣的向量中,再由新建的FilterResults封裝返回,(具體實(shí)現(xiàn)如下):</p>
78、<p> 1. 首先是對(duì)關(guān)鍵字進(jìn)行判斷是否為空,如為空則由values添加所有省份與城市,其中的allGroups和allChilds保存的是所有的省份與對(duì)應(yīng)的城市:</p><p> //當(dāng)過(guò)濾條件為空時(shí),返回所有的省份與城市 </p><p> if(constraint == null || constraint.length() == 0) { </p>
79、;<p> for(int i=0; i<allGroups.length; i++) { </p><p> ArrayList<Integer> index = new ArrayList<Integer>(); </p><p> //添加所有與之對(duì)應(yīng)的城市 </p><p> for(int j=0; j&
80、lt;allChilds[i].length; j++) { </p><p> index.add(j); </p><p><b> } </b></p><p> values.put(i, index); </p><p><b> } </b></p><p&g
81、t;<b> } </b></p><p> 2. 如果關(guān)鍵字constraint不為空,則以省份為單位進(jìn)行匹配,省份匹配的添加下面的所在城鎮(zhèn),如果不匹配,則進(jìn)一步深入匹配城鎮(zhèn),添加符合條件的城鎮(zhèn):</p><p> String filterStr = constraint.toString(); </p><p> for(int
82、i=0; i<allGroups.length; i++) { </p><p> //查找省名是否包含用戶(hù)輸入的字符串 </p><p> if(allGroups[i].contains(filterStr)) { </p><p> ArrayList<Integer> index = new ArrayList<Integer&
83、gt;(); </p><p> //添加所有與之對(duì)應(yīng)的城市 </p><p> for(int j=0; j<allChilds[i].length; j++) { </p><p> index.add(j); </p><p><b> } </b></p><p> val
84、ues.put(i, index); </p><p><b> } else { </b></p><p> ArrayList<Integer> index = new ArrayList<Integer>(); </p><p> //如果省份名沒(méi)有,則查找它下面的城市名是否包含 </p>&l
85、t;p> for(int j=0; j<allChilds[i].length; j++) { </p><p> if(allChilds[i][j].contains(filterStr)) { </p><p> index.add(j); </p><p><b> } </b></p><p&g
86、t;<b> } </b></p><p> //如果添加進(jìn)入了城市,說(shuō)明存在,則它的省份也添加進(jìn)去 </p><p> if(index.size() > 0) { </p><p> values.put(i, index); </p><p><b> } else { </b>
87、;</p><p> index = null; </p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> 3. 得到過(guò)濾的結(jié)果后將其用FilterResourc
88、e封裝后返回:</p><p> FilterResults results = new FilterResults(); </p><p> results.values = values; </p><p> results.count = values.size(); </p><p> 另外的publishResults(Ch
89、arSequence constraint,FilterResults results)方法就是根據(jù)上面得到的results對(duì)象來(lái)得到新的String[] groups與String[][] Childs數(shù)組,再調(diào)用BaseExpandableListAdapter父類(lèi)的notifyDataSetChanged()方法來(lái)更新列表,從而實(shí)現(xiàn)過(guò)濾后結(jié)果的顯示(具體實(shí)現(xiàn)如下):</p><p> 1. 首先將Filt
90、ersResult對(duì)象Map<Integer,ArrayList<Integer>>filterResult,然后來(lái)判斷過(guò)濾后的結(jié)果長(zhǎng)度是否為0,如果長(zhǎng)度為0則說(shuō)明過(guò)濾后的結(jié)果為空,則調(diào)用父類(lèi)的notifyDataSetInvalidated()方法阻止列表更新。</p><p> 2. 如果長(zhǎng)度不為0,則說(shuō)明存在過(guò)濾結(jié)果,則將它轉(zhuǎn)換為groups數(shù)組與childs數(shù)組,并調(diào)用notif
91、yDataSetChanged()方法實(shí)再更新:</p><p> 如上所述則就實(shí)現(xiàn)了帶有過(guò)濾性可伸展性列表適配性的實(shí)現(xiàn),則在使用時(shí)在XML組件配置文件中使用ExpandableListView列表,并調(diào)用它的setAdapter()方法來(lái)加載自定義的適配器。而在使用它的過(guò)濾功能時(shí)則調(diào)用自定義適配器的getFilter()得到過(guò)濾Filter對(duì)象,再調(diào)用Filter對(duì)象的filter(String)方法實(shí)現(xiàn)的,
92、在本系統(tǒng)中用觸發(fā)文本輸入框EditText的TextChangedListener事件調(diào)用從而實(shí)現(xiàn)手動(dòng)選擇所在城市的過(guò)濾查詢(xún)。</p><p> 5.2.3 訪問(wèn)網(wǎng)絡(luò)得到天氣信息</p><p> 接收用戶(hù)選擇的城市碼,訪問(wèn):http://m.weather.com.cn/data/<城市碼>.html得到天氣信息。首先實(shí)現(xiàn)上述功能需使用Android的網(wǎng)絡(luò)訪問(wèn)技術(shù),故編寫(xiě)
93、工具類(lèi)WebAccessTools類(lèi)如下:</p><p> public class WebAccessTools {</p><p> private Context context;</p><p> public WebAccessTools(Context context) {</p><p> this.context =
94、 context;</p><p><b> }</b></p><p> public String getWebContent(String url) {</p><p> //創(chuàng)建一個(gè)http請(qǐng)求對(duì)象</p><p> HttpGet request = new HttpGet(url);</p&g
95、t;<p> //創(chuàng)建HttpParams以用來(lái)設(shè)置HTTP參數(shù)</p><p> HttpParams params=new BasicHttpParams();</p><p> //設(shè)置連接超時(shí)或響應(yīng)超時(shí)</p><p> HttpConnectionParams.setConnectionTimeout(params, 3000);&l
96、t;/p><p> HttpConnectionParams.setSoTimeout(params, 5000);</p><p> //創(chuàng)建一個(gè)網(wǎng)絡(luò)訪問(wèn)處理對(duì)象</p><p> HttpClient httpClient = new DefaultHttpClient(params);</p><p><b> try{&
97、lt;/b></p><p><b> //執(zhí)行請(qǐng)求參數(shù)項(xiàng)</b></p><p> HttpResponse response = httpClient.execute(request);</p><p> //判斷是否請(qǐng)求成功</p><p> if(response.getStatusLine().g
98、etStatusCode() == HttpStatus.SC_OK) {</p><p><b> //獲得響應(yīng)信息</b></p><p> String content = EntityUtils.toString(response.getEntity());</p><p> return content;</p>
99、<p><b> } else {</b></p><p> //網(wǎng)連接失敗,使用Toast顯示提示信息</p><p> Toast.makeText(context, "網(wǎng)絡(luò)訪問(wèn)失敗,請(qǐng)檢查您機(jī)器的聯(lián)網(wǎng)設(shè)備!", Toast.LENGTH_LONG).show();</p><p><b>
100、}</b></p><p> }catch(Exception e) {</p><p> e.printStackTrace();</p><p> } finally {</p><p> //釋放網(wǎng)絡(luò)連接資源</p><p> httpClient.getConnectionManager(
101、).shutdown();</p><p><b> }</b></p><p> return null;</p><p><b> }</b></p><p><b> }</b></p><p> 5.2.4 Widget窗體小部件的更新
102、</p><p> 由于widget中的時(shí)鐘關(guān)系,需要對(duì)widget顯示進(jìn)行時(shí)刻的更新用來(lái)保持與系統(tǒng)中時(shí)間的一致。實(shí)現(xiàn)這個(gè)功能需要用到AlarmManager類(lèi),這個(gè)類(lèi)專(zhuān)門(mén)用來(lái)設(shè)定在某個(gè)指定的時(shí)間去完成指定的事件。設(shè)計(jì)思路是在Widget的onUpdate方法中啟動(dòng)一個(gè)自定義更新后臺(tái)服務(wù),更新widget,并設(shè)定下一分鐘再次調(diào)用此服務(wù)。具體實(shí)現(xiàn)過(guò)步驟如下:</p><p> 1. 首先
103、自定義一個(gè)后臺(tái)運(yùn)行服務(wù)類(lèi)繼承至Service類(lèi),實(shí)現(xiàn)它的服務(wù)開(kāi)始運(yùn)行調(diào)用的onStart()方法:</p><p> super.onStart(intent, startId); </p><p> //得到widget的布局對(duì)象 </p><p> RemoteViews views = WeatherWidget.getWeatherView(this
104、); </p><p> //得到AppWidgetManager widget管理器 </p><p> AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(this); </p><p> int[] appids=appWidgetManager.getAppWidgetIds(n
105、ew ComponentName(this, </p><p> WeatherWidget.class)); </p><p> //得到城市碼,并更新天氣 </p><p> SharedPreferences sp=getSharedPreferences( </p><p> SetCityActivity.CITY_CODE
106、_FILE, </p><p> SetCityActivity.MODE_PRIVATE); </p><p> String cityCode= sp.getString("code", ""); </p><p> if(cityCode!=null&&cityCode.trim().length(
107、) > 0) { </p><p> WeatherWidget.updateAppWidget(views, this, </p><p> appWidgetManager, cityCode); </p><p><b> } </b></p><p> appWidgetManager.updat
108、eAppWidget(appids, views); </p><p> //獲取當(dāng)前時(shí)間設(shè)置警報(bào)服務(wù) </p><p> Date date = new Date(); </p><p> long now =date.getTime(); </p><p> long unit=60000;//間隔一分鐘 </p>
109、<p> int s=date.getSeconds(); //得到秒數(shù) </p><p> unit=60000-s*1000; //將時(shí)間精確到秒 </p><p> pintent=PendingIntent.getService(this, 0, intent, 0); </p><p><b> //計(jì)時(shí)器 </b>
110、</p><p> alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE); </p><p> //AlarmManager.RTC_WAKEUP設(shè)置服務(wù)在系統(tǒng)休眠時(shí)同樣會(huì)運(yùn)行 </p><p> //第二個(gè)參數(shù)是下一次啟動(dòng)service時(shí)間 </p><p> ala
111、rm.set(AlarmManager.RTC_WAKEUP, now+unit, pintent); </p><p> 2. 然后在實(shí)現(xiàn)AppWidgetProvider的widget類(lèi)的onUpdate方法中啟動(dòng)這個(gè)自定義的服務(wù):</p><p> //啟動(dòng)一個(gè)自定義更新widget的后臺(tái)服務(wù) </p><p> context.startService
112、(new Intent(context,UpdateWidgetService.class)); </p><p> 3. 除了啟動(dòng)這個(gè)服務(wù)是不夠的,當(dāng)用戶(hù)刪除widget部件時(shí),后臺(tái)服務(wù)也必須停止,這樣就必須實(shí)現(xiàn)Service類(lèi)中的另一個(gè)方法onDestroy()方法,該方法在Service停止時(shí)調(diào)用,在這里用于取消AlarmManager設(shè)置的警報(bào)服務(wù):</p><p> //當(dāng)w
113、idget中通過(guò)調(diào)用context.stopService方法來(lái)指定銷(xiāo)毀service時(shí),被調(diào)用 </p><p> public void onDestroy() { </p><p><b> //取消定時(shí)管理 </b></p><p> if(alarm!=null) { </p><p> alarm.c
114、ancel(pintent); </p><p><b> } </b></p><p> super.onDestroy(); </p><p><b> } </b></p><p> 4. 則在widget類(lèi)的onDisabled()方法中調(diào)用stopService方法來(lái)停止后臺(tái)服務(wù),
115、其中的onDisabled方法在widget被用戶(hù)刪除時(shí)由系統(tǒng)自動(dòng)調(diào)用:</p><p> public void onDisabled(Context context) { </p><p> super.onDisabled(context); </p><p><b> //關(guān)閉后臺(tái)服務(wù) </b></p><p&
116、gt; context.stopService(new Intent(context,UpdateWidgetService.class)); </p><p><b> } </b></p><p> 在自定了一個(gè)Service服務(wù)后,系統(tǒng)必須在清單文件AndroidManifest.xml中聲明自定義的服務(wù):</p><p> &l
117、t;!-- 自定義的后臺(tái)更新widget服務(wù) --> </p><p> <service android:name=".UpdateWidgetService"></service> </p><p> 這樣就實(shí)現(xiàn)了widget的更新功能,其實(shí)在配制widget的AppWidgetProviderInfo的配制文件中通過(guò)設(shè)置andro
118、id:updatePeriodMillis屬性來(lái)設(shè)置widget的自動(dòng)更新,它的單位中毫秒,但由于自動(dòng)更新對(duì)性能的損壞,故它有一個(gè)最低值,這最低值長(zhǎng)于一分鐘,故而與該系統(tǒng)的要求不符,故以調(diào)用后臺(tái)Service的方式來(lái)解決。</p><p><b> 6. 功能測(cè)試</b></p><p> 本系統(tǒng)的測(cè)試,主要是通過(guò)手動(dòng)操作該系統(tǒng),查看是否存在異常或操作的結(jié)果是否符
119、合設(shè)計(jì)初衷來(lái)完成的,現(xiàn)將系統(tǒng)的主要操作結(jié)果截圖展示如下:</p><p> 1.系統(tǒng)啟動(dòng)時(shí)首先進(jìn)入歡迎界面,如圖6-1所示:</p><p><b> 圖6-1 歡迎界面</b></p><p> 2. 當(dāng)系統(tǒng)初次啟動(dòng)時(shí),由于沒(méi)有設(shè)置所在城市,則自動(dòng)由天氣顯示視圖跳轉(zhuǎn)到城市設(shè)置視圖,并要求用戶(hù)選擇所在城市,如圖6-2所示:</p&g
120、t;<p> 圖6-2 初次運(yùn)行設(shè)置城市</p><p> 3. 接下來(lái)點(diǎn)擊確定選擇城市,則系統(tǒng)確定用戶(hù)單擊城市的城市碼跳轉(zhuǎn)至天氣顯示界面,如圖6-3所示:</p><p> 圖6-3 顯示天氣界面</p><p> 4. 跳轉(zhuǎn)到天氣顯示界面后,可單擊“菜單”按鈕來(lái)顯示天氣的菜單,如圖6-4所示:</p><p> 圖
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于Android手機(jī)的天氣預(yù)報(bào)查詢(xún)系統(tǒng).pdf
- 基于android的天氣預(yù)報(bào)查詢(xún)系統(tǒng)的實(shí)現(xiàn)
- 基于android手機(jī)天氣預(yù)報(bào)系統(tǒng)
- 基于android的天氣預(yù)報(bào)查詢(xún)系統(tǒng)的實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 基于android的天氣預(yù)報(bào)查詢(xún)系統(tǒng)的實(shí)現(xiàn)--畢業(yè)設(shè)計(jì)
- 基于android手機(jī)移動(dòng)天氣預(yù)報(bào)系統(tǒng)
- 軟件工程畢業(yè)論文-基于android的天氣預(yù)報(bào)查詢(xún)系統(tǒng)的實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-基于android系統(tǒng)的天氣預(yù)報(bào)查詢(xún)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于Android的天氣預(yù)報(bào)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于android天氣預(yù)報(bào)課程設(shè)計(jì)
- 淺析基于android的天氣預(yù)報(bào)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(論文原稿)
- 手機(jī)天氣預(yù)報(bào)系統(tǒng)
- 基于Windows Mobile手機(jī)天氣預(yù)報(bào)查詢(xún)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于android系統(tǒng)天氣預(yù)報(bào)應(yīng)用程序畢業(yè)論文
- 基于android的天氣預(yù)報(bào)軟件的設(shè)計(jì)與實(shí)現(xiàn)
- 基于android平臺(tái)的天氣預(yù)報(bào)系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)畢業(yè)論文
- android3g手機(jī)天氣預(yù)報(bào)系統(tǒng)-畢業(yè)論文
- 基于android的天氣預(yù)報(bào)短信系統(tǒng)的畢業(yè)設(shè)計(jì)說(shuō)明書(shū)
- 65014.基于cs的天氣預(yù)報(bào)業(yè)務(wù)系統(tǒng)
- 畢業(yè)論文——手機(jī)天氣預(yù)報(bào)系統(tǒng)
評(píng)論
0/150
提交評(píng)論