版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> Android系統(tǒng)課程設(shè)計報告</p><p> 2016 年 夏 季學(xué)期</p><p> 題 目: 基于Android的天氣預(yù)報開發(fā) </p><p> 學(xué) 院: 電氣與電子工程學(xué)院 </p><p> 專 業(yè): 電子信息工程
2、 </p><p> 學(xué) 生 姓 名: </p><p> 學(xué) 號: </p><p> 指 導(dǎo) 教 師: </p><p> 完 成 日 期: 2016年7月15日
3、 </p><p><b> 評分表</b></p><p><b> 說明:</b></p><p> 項目一,考察程序運行情況。</p><p> 項目二,考察完成情況包括功能完整性,工作量,界面,用戶體驗等。</p><p> 項目三,考察課程設(shè)計報告的
4、格式和完整性。</p><p><b> 摘 要</b></p><p> 隨著移動通信技術(shù)的發(fā)展和無線數(shù)據(jù)業(yè)務(wù)的進(jìn)步,手機已被賦予了除通話以外的其它許多功能。全新的手機軟件領(lǐng)域已逐漸聚焦了眾多軟件開發(fā)商的目光,軟件開發(fā)者和軟件用戶將共同面臨這個振奮人心的新境界。</p><p> 本設(shè)計使用Android設(shè)計技術(shù)開發(fā)了一種運用在A
5、ndroid系統(tǒng)上的手機天氣預(yù)報軟件系統(tǒng),本系統(tǒng)通過選擇城市來獲得天氣,風(fēng)向,風(fēng)向,溫度等信息?;谑謾C的天氣預(yù)報系統(tǒng)軟件可以使用戶對于各地的天氣情況的實時掌握,極大的方便了用戶的出行和行程安排,避免了不必要的麻煩,具有很強的實用性。</p><p> 關(guān)鍵詞:Android;手機天氣預(yù)報軟件。</p><p><b> 目 錄</b></p>
6、<p><b> 第1章 緒論1</b></p><p> 1.1 課題研究內(nèi)容1</p><p> 1.2 課題研究的目的和意義1</p><p> 1.3 課題研究前景2</p><p> 第2章 系統(tǒng)需求分析3</p><p> 2.1 系統(tǒng)功能
7、需求3</p><p> 2.2 系統(tǒng)流程圖3</p><p> 2.3 系統(tǒng)界面需求4</p><p> 2.4 系統(tǒng)性能需求4</p><p> 第3章 詳細(xì)設(shè)計和功能實現(xiàn)5</p><p> 3.1 界面的設(shè)計5</p><p> 3.1.1 歡迎界面設(shè)計
8、5</p><p> 3.1.2 菜單界面設(shè)計6</p><p> 3.2 各模塊詳細(xì)設(shè)計6</p><p> 3.2.1 歡迎模塊設(shè)計6</p><p> 3.2.1 主工程設(shè)計7</p><p> 第4章 軟件測試15</p><p> 4.1 電腦模擬器
9、測試15</p><p> 4.2 手機端測試17</p><p> 第5章 總結(jié)與展望18</p><p> 5.1 總結(jié)18</p><p> 5.2 不足與展望18</p><p><b> 參考文獻(xiàn)19</b></p><p><
10、b> 附錄20</b></p><p><b> 重要程序118</b></p><p><b> 重要程序218</b></p><p><b> 一、緒論</b></p><p> Android是一種基于Linux的自由及開放源代碼的操作
11、系統(tǒng),主要使用于移動設(shè)備,如智能手機和平板電腦,由Google公司和開放手機聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發(fā)商及電信營運商組建開放手機聯(lián)盟共同研發(fā)改良Android系統(tǒng)。隨后Google以Apache開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。第一部Android智能手機發(fā)布于200
12、8年10月。Android逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上,如電視、數(shù)碼相機、游戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2012年11月數(shù)據(jù)顯示,Android占據(jù)全球智能手機操作系統(tǒng)市場76%的份額,中國市場占有率為90%。2013年09月24日谷歌開發(fā)的操作系統(tǒng)Android在迎來了5歲生日,全世界采用這款系統(tǒng)的設(shè)備數(shù)量已經(jīng)達(dá)到10億臺。</p><p>
13、1.1 課題研究內(nèi)容</p><p> 本課題研究的是基于Android平臺下的天氣軟件,目的是使用戶能隨時隨地的查詢天氣信息及天氣變化情況,讓生活更加舒適方便。本文講述Android平臺下天氣軟件的界面設(shè)計以及數(shù)據(jù)的獲取和解析,主要包括界面的實現(xiàn),控件的使用,界面的布局和數(shù)據(jù)處理等內(nèi)容,結(jié)合中國氣象網(wǎng)的天氣數(shù)據(jù),將準(zhǔn)確的天氣情況以友好的方式呈現(xiàn)給用戶,使用戶更加賞心悅目的體驗本軟件的服務(wù)。通過對界面的布局及控
14、件的應(yīng)用等相關(guān)內(nèi)容的學(xué)習(xí),使我們對Android平臺下界面開發(fā)工作有一個初步的了解,并且經(jīng)過這次開發(fā)過程,能夠基本掌握這些內(nèi)容。</p><p> 1.2 研究目的和意義</p><p> 天氣軟件是一種非常實用的信息服務(wù),隨著智能手機的不斷普及,各種智能手機平臺下都有各種各樣的天氣軟件。Android作為現(xiàn)在主流的智能手機之一,自然也需要這方面的軟件。天氣關(guān)系到人們的日常生活,如告知
15、溫暖,方便出行等。一款簡單實用的天氣軟件會很吸引用戶。</p><p> 基于Android平臺的天氣軟件已經(jīng)有很多,經(jīng)過分析,用戶第一眼往往是一個軟件的外觀,一個好看的界面才能讓用戶以一種愛美之心去嘗試,才能進(jìn)一步了解一個軟件的好壞,所以吸引眼球的界面是爭取用戶的第一步。因此,界面設(shè)計工作對應(yīng)用程序來說非常重要,在界面上吸引了用戶,才能進(jìn)一步讓用戶體驗應(yīng)用程序中的功能,使用這個軟件。</p>&
16、lt;p><b> 1.3 研究前景</b></p><p> Android最吸引人的特點是開源特性,因其開源,允許所有人對其代碼進(jìn)行開發(fā)和修改,同時又由于其代碼的簡單易學(xué)性,Android在全世界擁有眾多的粉絲。Android在中國的前景十分廣闊,首先是有成熟的消費者,在國內(nèi),Android社區(qū)十分紅火,這些社區(qū)為Android在中國的普及做了很好的推廣作用。國內(nèi)廠商和運營商也
17、紛紛加入了Android陣營,包括中國移動,中國聯(lián)通,中興通訊,華為通訊,聯(lián)想等大企業(yè),同時不僅僅局限于手機,國內(nèi)廠家也陸續(xù)推出了采用Android系統(tǒng)的產(chǎn)品,我們可以預(yù)見Android將會被廣泛應(yīng)用在國產(chǎn)智能上網(wǎng)設(shè)備上,將進(jìn)一步擴(kuò)大Android系統(tǒng)的應(yīng)用范圍。</p><p> Android采用了軟件層(Software stack)的構(gòu)架,主要分為三個部分。底層以Linux為內(nèi)核作為基礎(chǔ),由C語言開發(fā),
18、只提供基礎(chǔ)功能,中間層次包話函數(shù)庫和虛擬機,由C++開發(fā)。最上層是各種應(yīng)用軟件,包話通話程序,短信程序。應(yīng)用軟件可以由各公司或個人自行開發(fā),以JAVA編寫。</p><p><b> 二、系統(tǒng)需求分析</b></p><p> 2.1 系統(tǒng)功能需求</p><p> 1.可以羅列出全國所有的省市縣。</p><p&g
19、t; 2.可以查看全國任意城市的天氣信息</p><p> 3.可以自由的切換程式去查看其他城市的天氣</p><p> 4.提供手動更新以及后臺自動更新天氣的功能</p><p> 2.2 系統(tǒng)流程圖</p><p> 圖2.1 系統(tǒng)流程圖</p><p> 2.3 系統(tǒng)界面需求</p>
20、<p> 根據(jù)應(yīng)用程序的功能需要,對用戶界面做如下分析:</p><p> 實時天氣界面:顯示城市當(dāng)前的實時天氣狀況,包括城市名稱、城市名片、天氣情況、溫度高低、星期等信息。界面左邊有一列城市列表,顯示中國各個城市名稱,當(dāng)用戶想知道哪個城市的天氣情況時,點擊這個城市名就可以獲取天氣狀況,考慮到使軟件占用盡量小的內(nèi)存,軟件去掉了不必要的花哨,顯示城市名稱,城市名片,溫度和天氣情況,同時對未來6天的天
21、氣情況簡要描述,簡要顯示星期、天氣描述、溫度高低等數(shù)據(jù),使用戶一目了然,使人們及時了解天氣變化,對日常生活出行、穿衣做好準(zhǔn)備。</p><p> 2.4 系統(tǒng)性能需求</p><p> 1.應(yīng)用程序能根據(jù)中國天氣網(wǎng)接口返回的數(shù)據(jù)準(zhǔn)確的顯示地區(qū)天氣信息。</p><p> 2.應(yīng)用程序響應(yīng)時間應(yīng)在人的感覺和視覺范圍內(nèi),系統(tǒng)響應(yīng)時間足夠迅速。</p>
22、<p> 3.應(yīng)用程序在android4.0及以上版本運行時,應(yīng)具有適應(yīng)能力,能穩(wěn)定運行。</p><p> 4.應(yīng)用程序操作界面簡單明了,易于操作。</p><p> 三、詳細(xì)設(shè)計和功能實現(xiàn)</p><p><b> 3.1 界面的設(shè)計</b></p><p> 3.1.1 歡迎界面的設(shè)計<
23、;/p><p> 歡迎界面,采用簡潔明了的布局,添加了一個button點擊事件,點擊即可跳轉(zhuǎn)到主界面即省份選擇菜單。如圖3.1所示</p><p><b> 圖3.1 歡迎界面</b></p><p> 3.1.2 菜單界面設(shè)計</p><p> 菜單界面菜單界面采用列向布局和子菜單。這樣直觀明了,簡潔清晰。(當(dāng)為省
24、份時標(biāo)題欄顯示中國),省份,城市。如圖3.2所示</p><p> 3.2 a b</p><p> 注:a為省份菜單,b為市級菜單</p><p> 3.2 各模塊詳細(xì)設(shè)計</p><p> 3.2.1 歡迎模塊設(shè)計</p><p>
25、 1.新建一個WelcomeActivity類,并讓它繼承Activity類。任何活動都應(yīng)該重寫onCreate()方法。</p><p> public class WelcomeActivity extends Activity{</p><p> protected void onCreate(Bundle savedInstanceState) {</p><
26、;p> super.onCreate(savedInstanceState);</p><p><b> }</b></p><p><b> }</b></p><p> 2.新建一個布局文件,命名為welcome_layout,根元素選擇為LinearLayout。創(chuàng)建成功后,再LinearLayout下
27、添加背景添加語句:</p><p> android:background="@drawable/b"</p><p> 添加一個按鈕,用于點擊事件的觸發(fā):</p><p><b> <Button</b></p><p> android:id="@+id/button1&q
28、uot;</p><p> android:layout_width="match_parent"</p><p> android:layout_height="wrap_content"</p><p> android:text="點擊查詢天氣" /></p><p&g
29、t; 在WelcomeActivity里,關(guān)聯(lián)布局文件和實例化button.然后添加onClick,構(gòu)造出一個intent,傳入WelcomeActivity上下文,傳入ChooseAreaActivity.class為目標(biāo)活動。即在WelcomeActivity這個活動的基礎(chǔ)上打開ChooseAreaActivity這個活動。然后通過startActivity()方法來執(zhí)行這個intent。</p><p>
30、 setContentView(R.layout.welcome_layout);</p><p> Button button1=(Button)findViewById(R.id.button1);</p><p> button1.setOnClickListener(new OnClickListener(){</p><p> public voi
31、d onClick(View v){</p><p> Intent intent=new Intent(WelcomeActivity.this,ChooseAreaActivity.class);</p><p> startActivity(intent);</p><p> 3.2.2 主工程設(shè)計</p><p> 3
32、.2.2.1 第一階段</p><p> 1.新建工程命名為coolweather。為了讓項目有更好的結(jié)構(gòu)。需要在com.coolweather.app包下再新建一個包,如圖3.3所示。</p><p> 圖3.3 新建包構(gòu)架</p><p> 其中activity包用于存放所有活動代碼,db包用于存放所有數(shù)據(jù)庫相關(guān)的代碼,model包用于存放所有模型相關(guān)的代
33、碼,receiver包用于存放所有廣播相關(guān)的代碼,service包用于存放所有服務(wù)相關(guān)的代碼,util包用于存放所有工具相關(guān)的代碼。</p><p> 2.創(chuàng)建數(shù)據(jù)庫和表,這樣從服務(wù)器獲取的數(shù)據(jù)才能夠存儲到本地。表的設(shè)計這里建立三張表,Province,City,County,分別用于存放省,市,縣的各種數(shù)據(jù)信息,三張表的建表語句如下(以county表為例)</p><p><b&
34、gt; County:</b></p><p> create table County(</p><p> id integer primary key autoincrement,</p><p> county_name text,</p><p> county_code text,</p><
35、;p> city_id integer)</p><p> 其中id是自增長主鍵,county_name表示縣名,county_code表示縣級代號,city_id是county表關(guān)聯(lián)city表的外鍵。</p><p> 接下來將建表語句寫入到代碼中。在db包下新建CoolWeatherOpenHelper類,用于province,city,county的建表。核心代碼如下所示
36、。</p><p> public void onCreate(SQLiteDatabase db) {</p><p><b> //創(chuàng)建表</b></p><p> db.execSQL(CREATE_PROVINCE);</p><p> db.execSQL(CREATE_CITY);</p>
37、<p> db.execSQL(CREATE_COUNTY);</p><p><b> }</b></p><p> 3.為每張表創(chuàng)建一個對應(yīng)的實體類。在model下分別新建Province類,city類,county類。實體類非常簡單,基本就是對應(yīng)字段的get和set方法。類的創(chuàng)建如圖3.4所示。</p><p><
38、;b> 圖3.4 實體類</b></p><p> 4.創(chuàng)建一個CoolWeatherDB類,這個類將會把一些常用的數(shù)據(jù)庫操作封裝起來,以方便后面使用。代碼如下所示。定義數(shù)據(jù)庫名,版本。將構(gòu)造方法私有化,實例化數(shù)據(jù)庫。保存加載省級、市級、縣級數(shù)據(jù)信息</p><p> 從提交的程序中可以看到CoolWeatherDB是一個單例類,這里將它的構(gòu)造方法私有化,并提供了一
39、個getInstance()方法來獲取CoolWeatherDB的實例,這樣就可以保證全局范圍內(nèi)只會有一個CoolWeatherDB的實例。在CoolWeatherDB中,提供了六組方法,saveProvince()、loadProvince()、saveCity()、loadCities()、saveCounty()、loadCounties(),分別用于存儲省份數(shù)據(jù)、讀取所有省份數(shù)據(jù),存儲城市數(shù)據(jù)、讀取某省內(nèi)所有城市數(shù)據(jù),存儲縣數(shù)據(jù)
40、、讀取某市內(nèi)所有縣的數(shù)據(jù)。</p><p> 3.2.2.2 第二階段</p><p> 1.全國所有的省市縣的數(shù)據(jù)都是從服務(wù)器端獲取到的,所以為了使程序具有遍歷全國省市縣的功能,這里和服務(wù)器的交互式必不可少的。所以先在util包下增加一個HttpUtil類。因為在HttpUtil中使用到了HttpCallbackListener接口來回調(diào)服務(wù)返回的結(jié)果,因此還需要在util包下添加這
41、個接口。另外由于服務(wù)器返回的省市縣數(shù)據(jù)都是“代號|城市,代號|城市,……”這種格式的,所以要再提供一個工具類來解析和處理這種數(shù)據(jù),。在util包下再新建一個Utility類。在該類中,提供了handlepRrovince()、handleCitiesResponse()、handleCountiesResponse()這三個方法,分別用于解析和處理服務(wù)器返回的省級、市級、縣級數(shù)據(jù)。解析的規(guī)則就是先按逗號分隔,再按單豎線分隔,接著將解析出
42、來的數(shù)據(jù)設(shè)置到實體類中,最后調(diào)用CoolWeatherDB中的三個save()方法將數(shù)據(jù)存儲到相應(yīng)的表中。兩個類和一個接口的創(chuàng)建如圖3.5所示。</p><p> 圖3.5 解析數(shù)據(jù)工具類</p><p> 2.工具類準(zhǔn)備好,開始布局,在res/layout目錄下新建choose_area.xml布局。布局文件中的內(nèi)容比較簡單,先是定義一個50dp高的頭布局,并在里面放置了一個Text
43、View用于顯示標(biāo)題內(nèi)容。然后在頭布局的下面定義了一個ListView,用于顯示省市縣的數(shù)據(jù)。</p><p> 3.編寫用于遍歷省市縣的活動,在activity包下新建ChooseAreaActivity繼承自Activity。</p><p> 該類中的代碼非常多,這里只把邏輯理理。在onCreate()方法中先是獲取到了一些控件的實例,然后去初始化了ArrayAdapter,將它
44、設(shè)置為ListView的適配器。之后又去獲取到了CoolWeatherDB的實例,并給ListView設(shè)置了點擊事件,到這,初始化工作完成。</p><p> 在onCreate()方法的最后調(diào)用了queryProvince()方法,也就是從這里開始加載省級數(shù)據(jù)的。queryProvinces()方法的內(nèi)部會首先調(diào)用CoolWeatherDB和loadProvinces()方法來從數(shù)據(jù)庫讀取省級數(shù)據(jù)。如果讀取到
45、了就直接將數(shù)據(jù)顯示到界面上,如果沒有讀取到就調(diào)用queryFromServer()方法從服務(wù)器上查詢數(shù)據(jù)。</p><p> queryFromServer()方法會先根據(jù)傳入的參數(shù)來拼裝查詢地址,現(xiàn)在網(wǎng)上有不少免費的天氣預(yù)報接口可以實現(xiàn)上述功能,例如新浪天氣,百度天氣的,這里我準(zhǔn)備使用中國天氣網(wǎng)提供的API,接口來實現(xiàn)上述功能。</p><p> 比如要想,努力出中國所有的省份,只需
46、訪問如下地址,這里需要注意,如果用瀏覽器直接訪問的話,可能會得到一個錯誤提示。這是因為瀏覽器認(rèn)為服務(wù)器應(yīng)該返回一個xml格式的數(shù)據(jù)。但實際上服務(wù)器返回的數(shù)據(jù),并不是xml格式所導(dǎo)致的,右鍵查看網(wǎng)頁源碼代碼就可以看到服務(wù)器返回的真是數(shù)據(jù)了:</p><p> http://www.weather.com.cn/data/list3/city.xml</p><p> 服務(wù)器會返回一段文本
47、信息,其中包含了中國所有的省份名稱以及省級代號,如下</p><p> 01|北京,02|上海,03|天津,04|重慶,05|黑龍江,06|吉林,07|遼寧,08|內(nèi)蒙古,09|河北,10|山西,11|陜西,12|山東,13|新疆,14|西藏,15|青海,16|甘肅,17|寧夏,18|河南,19|江蘇,20|湖北,21|浙江,22|安徽,23|福建,24|江西,25|湖南,26|貴州,27|四川,28|廣東,2
48、9|云南,30|廣西,31|海南,32|香港,33|澳門,34|臺灣</p><p> 可以看到北京的代號是01,上海的代號是02,不同省份之間以逗號隔開,省份名稱和省級代號之間用單豎線分隔。要想知道某個省內(nèi)有哪些城市,比如江蘇的代號是19,那么只要訪問如下地址:</p><p> http://www.weather.com.cn/data/list3/city19.xml</
49、p><p> 這次服務(wù)器返回的數(shù)據(jù)如下:</p><p> 190401|蘇州,190402|常熟,190403|張家港,190404|昆山,190405|吳縣東山,190406|吳縣,190407|吳江,190408|太倉</p><p> 通過這種方式,就能把全國所有的省,市,縣,都羅列出來了。那么解決了全國省市縣數(shù)據(jù)的獲取,然后就是解決查詢天氣信息的問題。這
50、里原理同上,比如,昆山的縣級代號是190404,那么訪問如下地址:</p><p> http://www.weather.com.cn/data/list3/city190404.xml</p><p> 這時服務(wù)器返回的數(shù)據(jù)非常簡短:</p><p> 190404|101190404</p><p> 其中后半部分的101190
51、404就是昆山所對應(yīng)的天氣代號了。這個時候再去訪問查詢天氣接口,將相應(yīng)的天氣代號填入即可,接口地址如下:</p><p> http://www.weather.com.cn/data/cityinfo/101190404.html</p><p> 這樣服務(wù)器就會把昆山當(dāng)前的天氣信息以JSON格式返回給我們了,如下所示:</p><p> {“weather
52、info”:</p><p> “city”:昆山,”cityid”:101190404,”temp1”:”21℃”,”temp2”:”9℃”,”weather”:”多云轉(zhuǎn)小雨”,”img1”:”d1.gif”,”img2”:”n7.gif”,”ptime”:”11:00”}</p><p> 其中city表示城市名,cityid表示城市對應(yīng)的天氣代號,temp1和temp2表示氣溫是
53、幾度到幾度,weather表示今日天氣信息的描述,img1和img2表示今日天氣對應(yīng)的圖片,ptime表示天氣發(fā)布的時間。</p><p> 確定了查詢地址之后,接下來就調(diào)用HttpUtil的sendHttpRequest()方法來向服務(wù)器發(fā)送請求,響應(yīng)的數(shù)據(jù)會回調(diào)到onFinish()方法中,然后去調(diào)用Utility的handleProvincesResponse()方法牽扯到了UI操作,因此必須要在主線程中
54、調(diào)用,這里借助了runOnUiThread()方法來實現(xiàn)從子線程切換到主線程,它的實現(xiàn)原理其實也是基于異步消息處理機制的?,F(xiàn)在數(shù)據(jù)庫中已經(jīng)存在了數(shù)據(jù),因此調(diào)用queryProvinces()就會直接將數(shù)據(jù)顯示到界面上。</p><p> 當(dāng)你點擊了某個省的時候進(jìn)入到ListView的onClick()方法中,這個時候會根據(jù)當(dāng)前的級別來判斷是去調(diào)用queryCities()方法還是queryCounties()方
55、法,queryCities()方法是去查詢市級數(shù)據(jù),而queryCounties()方法是去查詢縣級數(shù)據(jù),這兩個方法內(nèi)部的流程和queryProvinces()方法基本相同,不重復(fù)說明了。</p><p> 這里重寫onBackPressed()方法來覆蓋默認(rèn)Back鍵的行為,會根據(jù)當(dāng)前的級別來判斷是返回市級列表、省級列表、還是直接退出。</p><p> 配置androidMaini
56、fest.xml文件。為活動添加訪問網(wǎng)絡(luò)權(quán)限</p><p> <uses-permission android:name="android.permission.INTERNET"/></p><p> 現(xiàn)在已經(jīng)程序已經(jīng)可以運行。如圖3.6所示。</p><p><b> 圖3.6 省份菜單</b><
57、;/p><p> 可以看到,全國所有的省級單位都出來了,繼續(xù)查看市級單位,比如點擊黑龍江如圖3.7所示。</p><p><b> 圖3.7 市級菜單</b></p><p> 然后再點擊黑河,結(jié)果如圖3.8所示。</p><p><b> 圖3.8 縣級菜單</b></p>&l
58、t;p> 這樣第二階段的開發(fā)工作完成。</p><p> 3.2.2.3 第三階段</p><p> 1.查詢天氣,需要把天氣信息顯示出來。所以要穿件一個新的界面用于顯示。創(chuàng)建weather_layout.xml。在這個布局文件中,并沒有特殊的控件,基本就是使用TextView顯示數(shù)據(jù)信息,然后嵌套多層LinearLayout和RelativeLayout來控制TextView
59、的顯示位置。</p><p> 在Utility類中添加幾個方法,用于解析和處理服務(wù)返回的JSON數(shù)據(jù),如下所示</p><p> 其中handleWeatherResponse()方法用于將JSON格式的天氣信息全部解析出來,saveWeatherInfo()方法,用于將這些數(shù)據(jù)都存儲到SharedPreferences文件中。</p><p> 在acti
60、vity包下,新建WeatherActivity繼承自Activity。該活動用于顯示城市名,發(fā)布時間,氣溫,日期等。</p><p> 最后將ChooseAreaActivity和WeatherActivity關(guān)聯(lián)。在ChooseAreaActivity中添加代碼:</p><p> SharedPreferences prefs=PreferenceManager.getDefau
61、ltSharedPreferences(this);</p><p> if(prefs.getBoolean("city_selected", false)&&!isFromWeatherActivity){</p><p> Intent intent=new Intent(this,WeatherActivity.class);</p&g
62、t;<p> startActivity(intent);</p><p><b> finish();</b></p><p><b> …………</b></p><p> else if(currentLevel==LEVEL_COUNTY){</p><p> Stri
63、ng countyCode=countyList.get(index).getCountyCode();</p><p> Intent intent=new Intent(ChooseAreaActivity.this,WeatherActivity.class);</p><p> intent.putExtra("county_code", countyCod
64、e);</p><p> startActivity(intent);</p><p><b> finish();</b></p><p> 最后添加切換城市和更新天氣按鈕。</p><p> 運行程序,如圖3.9所示</p><p><b> 圖3.9 北安天氣</b
65、></p><p><b> 四、軟件測試</b></p><p> 4.1 電腦模擬器測試</p><p> 軟件編寫完成,對其進(jìn)行測試,首先將手機天氣預(yù)報系統(tǒng)在電腦模擬環(huán)境下測試的方案,以下是對系統(tǒng)進(jìn)行測試,在Eclipse 的Package Explorer 窗口中用鼠標(biāo)右鍵選擇weather工程名,在彈出的窗口中選擇&quo
66、t;Run As"→"Android Application"安裝該應(yīng)用程序到Android 模擬器并啟動它,如圖4.1所示。</p><p> 圖4.1 啟動模擬器</p><p> 等待模擬器啟動完成軟件的安裝,然后單擊所要查詢的城市名稱列表項,稍等片刻便會顯示出該城市的天氣實況信息。電腦模擬測試結(jié)果如圖4.2所示。</p><p&
67、gt;<b> 圖4.2 潞城天氣</b></p><p> 經(jīng)查詢當(dāng)?shù)氐奶鞖獍l(fā)現(xiàn)基本一致,所以可以知道軟件獲得的數(shù)據(jù)是正確的,說明軟件的可行性基本滿足要求。</p><p><b> 4.2手機端測試</b></p><p> 圖 4.3 臨武天氣</p><p> 該測試說明開發(fā)的天氣
68、預(yù)報軟件可以獨立在Android設(shè)備運行,滿足設(shè)計要求的獨立性,通過與網(wǎng)絡(luò)的數(shù)據(jù)比較,可以發(fā)現(xiàn),天氣預(yù)報軟件獲取的數(shù)據(jù)與實際的天氣情況非常接近,說明數(shù)據(jù)的準(zhǔn)確性,實時性;從圖9可以看出,當(dāng)選擇不同的城市時,軟件可以通過網(wǎng)絡(luò)獲取不同城市的天氣信息,說明該天氣預(yù)報軟件可以獲取不同城市的氣象信息,滿足設(shè)計要求。</p><p><b> 五、總結(jié)與展望</b></p><p&
69、gt;<b> 5.1總結(jié)</b></p><p> 為期兩周的Android實訓(xùn)已經(jīng)結(jié)束,在這兩周中我學(xué)習(xí)了很多,也得到了很多。實訓(xùn)是把理論與實際結(jié)合,通過對理論知識的理解,領(lǐng)悟從而運用到生活實際鞏固所學(xué)的知識,提高對實際生活的認(rèn)識,積累經(jīng)驗。在此期間能夠初次體會到實際生產(chǎn)中的種種技能與經(jīng)驗。完成一項項項目能體現(xiàn)出獨立思考能力。在本次Android天氣預(yù)報軟件開發(fā)過程中,我通過學(xué)校的圖
70、書館資料和網(wǎng)上查詢,了解了Android的搭建、Intent、Activity、Service等知識。Android環(huán)境搭建的基本工作完成后,本文對界面的控件、布局和美觀方面進(jìn)行設(shè)計,對數(shù)據(jù)獲取和解析做了分析,通過模擬器顯示城市名片,實時天氣情況</p><p> Android生產(chǎn)實習(xí)對目前應(yīng)用現(xiàn)狀進(jìn)行了分析與比較,進(jìn)而研究分析Android平臺的系統(tǒng)架構(gòu)和組件模型。在此基礎(chǔ)上,基于Android平臺設(shè)計和開
71、發(fā),實現(xiàn)對android編程的理解與應(yīng)用,特別是在對于控件的應(yīng)用和活動的創(chuàng)建有了很深的理解。</p><p><b> 5.2不足和展望</b></p><p> 這次實習(xí)我制作的軟件還是有很多不足之處,這個軟件還可以進(jìn)一步發(fā)展,比如“短信預(yù)報”、“新聞模塊”等功能,如果這些功能都能實現(xiàn)將會對用戶有更多的幫助,使他們的生活更加愉悅和方便。我會繼續(xù)為這個軟件添加功能
72、,直到它成長為一個強大的app。Android 智能手機應(yīng)用程序的開發(fā)涉及了它的整個體系結(jié)構(gòu),是一項非常復(fù)雜的工程。我要以嚴(yán)謹(jǐn)?shù)膽B(tài)度對待它。不驕縱,不菲薄。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] .Bill Phillips.Android編程權(quán)威指南.人民郵電出版社,2015</p><p> [2].任
73、玉剛.Android開發(fā)藝術(shù)探索.電子工業(yè)出版社,2016</p><p> [3].何紅輝 關(guān)愛民.Android 源碼設(shè)計模式解析與實戰(zhàn).人民郵電出版社,2015</p><p> [4].郝玉龍 .Android程序設(shè)計基礎(chǔ).北京交通大學(xué)出版社,2013</p><p> [5].徐宜生.Android 群英傳.電子工業(yè)出版社,2012<
74、/p><p><b> 附錄</b></p><p><b> 重要程序1</b></p><p> protected void onCreate(Bundle savedInstanceState) {</p><p> super.onCreate(savedInstanceState);
75、</p><p> isFromWeatherActivity=getIntent().getBooleanExtra("from_weather_activity", false);</p><p> SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);</p
76、><p> if(prefs.getBoolean("city_selected", false)&&!isFromWeatherActivity){</p><p> Intent intent=new Intent(this,WeatherActivity.class);</p><p> startActivity(int
77、ent);</p><p><b> finish();</b></p><p><b> return ;</b></p><p><b> }</b></p><p> requestWindowFeature(Window.FEATURE_NO_TITLE);&l
78、t;/p><p> setContentView(R.layout.choose_area);</p><p> listView=(ListView)findViewById(R.id.list_view);</p><p> titleText=(TextView)findViewById(R.id.title_text);</p><p&
79、gt; adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dataList);</p><p> listView.setAdapter(adapter);</p><p> coolWeatherDB=CoolWeatherDB.getInstance(this);&l
80、t;/p><p> listView.setOnItemClickListener(new OnItemClickListener() {</p><p><b> @Override</b></p><p> public void onItemClick(AdapterView<?> arg0, View view, int
81、index,long arg3) {</p><p> if(currentLevel==LEVEL_PROVINCE){</p><p> selectedProvince=provinceList.get(index);</p><p> queryCitys();</p><p> }else if(currentLevel==
82、LEVEL_CITY){</p><p> selectedCity=cityList.get(index);</p><p> queryCounty();</p><p> }else if(currentLevel==LEVEL_COUNTY){</p><p> String countyCode=countyList.get
83、(index).getCountyCode();</p><p> Intent intent=new Intent(ChooseAreaActivity.this,WeatherActivity.class);</p><p> intent.putExtra("county_code", countyCode);</p><p> st
84、artActivity(intent);</p><p><b> finish();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> });</b></p><p&
85、gt; queryProvince();//加載省級數(shù)據(jù)</p><p><b> }</b></p><p> //查詢?nèi)珖氖?,?yōu)先從數(shù)據(jù)庫查詢,如果沒有查詢到再去服務(wù)器上查詢</p><p> private void queryProvince() {</p><p> provinceList=coo
86、lWeatherDB.loadProvince();</p><p> if(provinceList.size()>0){</p><p> dataList.clear();</p><p> for(Province province:provinceList){</p><p> dataList.add(provinc
87、e.getProvinceName());</p><p><b> }</b></p><p> adapter.notifyDataSetChanged();</p><p> listView.setSelection(0);</p><p> titleText.setText("中國"
88、;);</p><p> currentLevel=LEVEL_PROVINCE;</p><p><b> }else{</b></p><p> queryFromServer(null, "province");</p><p><b> }</b></p&g
89、t;<p><b> }</b></p><p><b> 重要程序2</b></p><p> private void initViews() {</p><p> weatherInfoLayout=(LinearLayout)findViewById(R.id.weather_info_lay
90、out);</p><p> cityNameText=(TextView)findViewById(R.id.city_name);</p><p> publishText=(TextView)findViewById(R.id.publish_text);</p><p> weatherDespText=(TextView)findViewById(R
91、.id.weather_desp);</p><p> temp1Text=(TextView)findViewById(R.id.temp1);</p><p> temp2Text=(TextView)findViewById(R.id.temp2);</p><p> currentDateText=(TextView)findViewById(R.id
92、.current_date);</p><p> switchCity=(Button)findViewById(R.id.switch_city);</p><p> refreshWeather=(Button)findViewById(R.id.refresh_weather);</p><p> String countyCode=getIntent(
93、).getStringExtra("county_code");</p><p> if(!TextUtils.isEmpty(countyCode)){//由縣級代號去查詢天氣</p><p> publishText.setText("同步中...");</p><p> weatherInfoLayout.setV
94、isibility(View.INVISIBLE);</p><p> cityNameText.setVisibility(View.INVISIBLE);</p><p> queryWeatherCode(countyCode);</p><p> }else{//沒有縣級代號就直接顯示本地天氣</p><p> showWea
95、ther();</p><p><b> }</b></p><p><b> }</b></p><p> private void initEvents() {</p><p> switchCity.setOnClickListener(new OnClickListener() {&
96、lt;/p><p><b> @Override</b></p><p> public void onClick(View v) {</p><p> Intent intent=new Intent(WeatherActivity.this, ChooseAreaActivity.class);</p><p>
97、 intent.putExtra("from_weather_activity", true);</p><p> startActivity(intent);</p><p> finish();</p><p><b> }</b></p><p><b> });<
98、/b></p><p> refreshWeather.setOnClickListener(new OnClickListener() {</p><p><b> @Override</b></p><p> public void onClick(View v) {</p><p> publishT
99、ext.setText("同步中...");</p><p> SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this);</p><p> String weatherCode=prefs.getString("weather_c
100、ode", "");</p><p> if(!TextUtils.isEmpty(weatherCode)){</p><p> queryWeatherInfo(weatherCode);</p><p><b> }</b></p><p><b> }</b&
101、gt;</p><p><b> });</b></p><p><b> }</b></p><p> private void showWeather() {</p><p> SharedPreferences prefs=PreferenceManager.getDefaultSha
102、redPreferences(this);</p><p> cityNameText.setText(prefs.getString("city_name", ""));</p><p> temp1Text.setText(prefs.getString("temp1", ""));</p>
103、<p> temp2Text.setText(prefs.getString("temp2", ""));</p><p> weatherDespText.setText(prefs.getString("weather_desp", ""));</p><p> publishText.
104、setText(prefs.getString("publish_time", "")+" 發(fā)布");</p><p> currentDateText.setText(prefs.getString("cuttent_date", ""));</p><p> weatherInfoL
105、ayout.setVisibility(View.VISIBLE);</p><p> cityNameText.setVisibility(View.VISIBLE);</p><p> Intent i=new Intent(this,AutoUpdateService.class);</p><p> startService(i);</p>
106、<p><b> }</b></p><p> private void queryWeatherCode(String countyCode) {</p><p> String address="http://www.weather.com.cn/data/list3/city"+countyCode+".xml&
107、quot;;</p><p> queryFromServer(address,"countyCode");</p><p><b> }</b></p><p> private void queryWeatherInfo(String weatherCode) {</p><p> Str
108、ing address="http://www.weather.com.cn/data/cityinfo/"+weatherCode+".html";</p><p> Log.v("crb", address);</p><p> queryFromServer(address,"weatherCode"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安卓天氣預(yù)報課程設(shè)計
- 安卓天氣預(yù)報實訓(xùn)報告
- 安卓天氣預(yù)報實訓(xùn)報告
- 基于android天氣預(yù)報課程設(shè)計
- 基于安卓系統(tǒng)天氣預(yù)報應(yīng)用程序開發(fā)本科
- 天氣預(yù)報技術(shù)與方法課程
- 天氣預(yù)報技術(shù)與方法課程
- 短期天氣預(yù)報試題庫天氣預(yù)報概要
- 專題天氣預(yù)報
- 農(nóng)用天氣預(yù)報
- 《天氣預(yù)報》教案
- 概率天氣預(yù)報
- 中期天氣預(yù)報
- 短期天氣預(yù)報
- 天氣預(yù)報圖例
- 辰溪實時天氣預(yù)報_天氣機
- 新民實時天氣預(yù)報_天氣機
- 武安實時天氣預(yù)報_天氣機
- 農(nóng)用天氣預(yù)報-臺州
- 天氣預(yù)報符號說明
評論
0/150
提交評論