2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論