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

下載本文檔

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

文檔簡介

1、<p>  信息工程學(xué)院本科生畢業(yè)設(shè)計說明書</p><p>  題目:基于Android的天氣短信系統(tǒng)的設(shè)計與實現(xiàn) </p><p><b>  目 錄</b></p><p><b>  1 系統(tǒng)概述1</b></p><p>  1.1 設(shè)計目的

2、1</p><p>  1.2 設(shè)計思路1</p><p>  1.3系統(tǒng)需求分析1</p><p><b>  1.4開發(fā)環(huán)境2</b></p><p>  1.4.1 Android開發(fā)環(huán)境的介紹2</p><p>  1.4.2 Android的開發(fā)平臺搭建2</p>

3、<p>  1.5 運行環(huán)境3</p><p>  1.6 參考文獻(xiàn)3</p><p><b>  2.總體設(shè)計4</b></p><p><b>  2.1系統(tǒng)結(jié)構(gòu)4</b></p><p>  2.1.1 系統(tǒng)流程圖4</p><p>  2.1.

4、2 模塊結(jié)構(gòu)圖4</p><p>  2.2數(shù)據(jù)庫的設(shè)計5</p><p>  2.3 模塊功能設(shè)計6</p><p>  2.3.1 獲取當(dāng)前天氣功能6</p><p>  2.3.2 選擇城市的功能6</p><p>  2.3.3 發(fā)送短信的功能6</p><p><b&

5、gt;  3.運行設(shè)計7</b></p><p>  3.1用戶界面設(shè)計7</p><p>  3.2 運行代碼9</p><p><b>  4.系統(tǒng)測試25</b></p><p>  4.1功能性測試25</p><p>  4.2 穩(wěn)定性測試27</p>

6、<p>  4.3 安全性測試27</p><p><b>  5 結(jié)論28</b></p><p>  1 系統(tǒng)概述 </p><p>  近幾年來隨著3G 技術(shù)成熟和智能手機的不斷普及,移動應(yīng)用的需求與日俱增,移動應(yīng)用開發(fā)成為當(dāng)下最熱門的技術(shù)之一。在Google和Android 手機聯(lián)盟的共同推動下,Android在

7、眾多移動應(yīng)用開發(fā)平臺中脫穎而出。Android是一個真正意義上的開源智能手機操作系統(tǒng),該系統(tǒng)一經(jīng)推出立即受到全球移動設(shè)備廠商和開發(fā)者的熱捧。為順應(yīng)潮流,本設(shè)計旨在搭載 Android 的移動設(shè)備上運行,實現(xiàn)天氣狀況的實時動態(tài)更新與顯示,并將顯示的天氣可以發(fā)短信給指定的聯(lián)系人。</p><p>  1.1 設(shè)計目的 </p><p>  天氣軟件是一種非常實用的信息服務(wù),隨著智能手機的不

8、斷普及,各種智能手機平臺下都有各種各樣的天氣軟件。Android作為現(xiàn)在主流的智能手機之一,自然也需要這方面的軟件。天氣關(guān)系到人們的日常生活,如告知溫暖,方便出行等。此外,對未來天氣的預(yù)測你還可以指定發(fā)短信給家里不會上網(wǎng)的父母,幫助父母進(jìn)行農(nóng)作物的澆灌、施肥、收割等工作。</p><p><b>  1.2 設(shè)計思路</b></p><p>  天氣短信這個設(shè)計不算復(fù)

9、雜,我先在eclipse里面把系統(tǒng)的主界面寫好,然后先是聯(lián)網(wǎng)解析從360天氣預(yù)報端口讀取來的數(shù)據(jù),數(shù)據(jù)解析完了在本地創(chuàng)建數(shù)據(jù)庫,把聯(lián)網(wǎng)解析的數(shù)據(jù)保存在本地,減少流量的使用。之后就是選擇想要的城市來獲取當(dāng)前城市未來的天氣情況,并把天氣情況編輯成樣例短信,最后選擇聯(lián)系人在指定的時間發(fā)送短信,最后就是短信發(fā)送成功之后會提醒的消息推送通知。</p><p><b>  1.3系統(tǒng)需求分析</b>&l

10、t;/p><p>  本軟件是一個基于Android的應(yīng)用程序,啟動程序后可以進(jìn)行城市的選擇設(shè)置,可以通過文字顯示當(dāng)前和未來的天氣狀況,包括溫度、濕度、風(fēng)向和雨雪情況等。這些天氣數(shù)據(jù)是通過后臺服務(wù)獲取的,這個后臺服務(wù)可以按照一定時間間隔,從360上獲取天氣預(yù)報信息,并將天氣信息保存在數(shù)據(jù)庫中??梢赃x定指定的聯(lián)系人并且設(shè)置指定的時間發(fā)送天氣短信給對方。</p><p>  從上面的描述中可以基本

11、了解軟件的功能需求:</p><p>  (1) 啟動Android的應(yīng)用程序;</p><p>  (2) 設(shè)置界面:對要顯示天氣預(yù)報的城市進(jìn)行設(shè)置;</p><p>  (3) 顯示界面:通過文字顯示當(dāng)前的天氣情況,包括日期、時間、城市、最高溫度、最低溫度、當(dāng)前溫度等。而且可以選定指定的聯(lián)系人在指定的時間發(fā)送天氣短信給對方。</p><p&g

12、t;<b>  1.4開發(fā)環(huán)境</b></p><p>  1.4.1 Android開發(fā)環(huán)境的介紹</p><p>  Android平臺使用Java編程語言來開發(fā)應(yīng)用程序,而Android提供了對Java的核心支持??紤]到Java虛擬機的執(zhí)行效率和占用資源情況,Google重新設(shè)計了Java的編譯器,命名為Dalvik。Dalvik是經(jīng)過優(yōu)化的Java編譯器,允許

13、在有限的內(nèi)存中同時運行多個虛擬機的實例,并且每一個Dalvik應(yīng)用作為一個獨立的Linux進(jìn)程執(zhí)行,獨立的進(jìn)程可以防止在虛擬機崩潰的時候所有程序都被關(guān)閉。</p><p>  項目的開發(fā)在Eclipse環(huán)境中進(jìn)行,由于進(jìn)行的是Android應(yīng)用程序的開發(fā),需要在Eclipse安裝ADT插件,即Android開發(fā)工具,這樣Eclipse就可以和Android SDK建立連接,在Eclipse中啟動Android模擬

14、器、調(diào)試程序等工作。</p><p>  由以上分析可知,Android平臺的搭建需要Android SDK、Java SDK、Eclipse和ADT四個軟件。</p><p>  1.4.2 Android的開發(fā)平臺搭建</p><p>  在進(jìn)行Android應(yīng)用程序的開發(fā)前,要先搭建Android平臺,然后才能在開發(fā)環(huán)境中進(jìn)行編程。根據(jù)官方指導(dǎo),對Androi

15、d平臺的搭建過程介紹如下:</p><p>  首先,在官方網(wǎng)址上下載JDK6.0并安裝,網(wǎng)址是http://www.oracle.com/technetwork/java/javase/downloads/index.html,安裝后設(shè)置系統(tǒng)環(huán)境變量JAVA_HOME、CLASS_PATH、PATH的值;</p><p>  然后,在官方網(wǎng)址上下載更新的SDK進(jìn)行安裝,官方網(wǎng)址為http

16、://development.android.com/sdk/index.html,下載完后解壓到指定文件夾,啟動SDK Manager進(jìn)行安裝,選擇需要的Android版本,然后更新,這次更新需要的時間比較慢,所以更新前要做好準(zhǔn)備。安裝完成后,將ADB命令所在的目錄platform-tools的完整路徑添加到系統(tǒng)的環(huán)境變量PATH中,就能夠在命令中使用ADB命令了;</p><p>  接下來要安裝的是ADT插

17、件,即Android開發(fā)工具。因為ADT在線安裝容易遇到問題,增加一些不必要的麻煩所以需要下載后在本地安裝。指定網(wǎng)址為http://development.android.com/sdk/index.html,下載存放在指定的位置以便后面使用;</p><p>  最后,下載Eclipse,建議選擇Eclipse3.4以上版本,網(wǎng)址為http://www.eclipse.org/downloads/,解壓到指定位

18、置后運行。選擇Eclipse菜單中的Help>Install New Software選項卡上的Available Software,點擊右側(cè)的Add,然后在Name框中填寫Android,在Location框中選擇上步下載的ADT文件,然后點擊OK>Finish>Install All,這時關(guān)閉Eclipse再重新啟動。重啟后選擇Eclipse菜單中的Window>Preferences,在左側(cè)的Android

19、項目中SDK Location中填入Android SDK解壓后的目錄,然后點擊Apply。</p><p>  這樣,整個平臺的搭建工作就完成了。</p><p><b>  1.5 運行環(huán)境</b></p><p>  運行需要Android SDK、Java JDK、Eclipse和ADT四個軟件,以及Android2.2的虛擬機或者真機

20、,操作系統(tǒng)為Windows7的PC機一臺</p><p><b>  1.6 參考文獻(xiàn)</b></p><p>  [1] 王向輝,張國印,沈潔. Android應(yīng)用程序開發(fā)[M].北京:清華大學(xué)出版社,2012</p><p>  [2] 李剛. 瘋狂Android講義[M]. 北京:電子工業(yè)出版社,2013</p><p

21、>  [3] 明日科技. Android從入門到精通[M]. 北京:清華大學(xué)出版社,2012</p><p>  [4] 李剛. 瘋狂Java講義[M]. 北京:電子工業(yè)出版社,2013</p><p>  [5] Y.Daniel Liang. Java語言程序設(shè)計(李娜) [M]. 北京:機械工業(yè)出版社,2011</p><p>  [6] 鄧凡平. 深

22、入理解Android[M]. 北京:機械工業(yè)出版社,2011</p><p>  [7] 馬超,孫仁貴. Android應(yīng)用開發(fā)全程實錄[M]. 北京:人民郵電出版社,2012</p><p>  [8] 劉昌平,范明鈺.Android手機的輕量級訪問控制[J].計算機應(yīng)用研究,2010,7:201-212.</p><p>  [9] 張仕成.基于Google A

23、ndroid平臺的應(yīng)用程序開發(fā)與研究[J].電腦知識與技術(shù),2009:35-59.</p><p>  [10] 楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機械工業(yè)出版社,2010</p><p><b>  2.總體設(shè)計</b></p><p><b>  2.1系統(tǒng)結(jié)構(gòu)</b></p><p&

24、gt;  2.1.1 系統(tǒng)流程圖</p><p>  本系統(tǒng)的流程是當(dāng)我們在桌面上打開軟件時進(jìn)入到用戶的主界面,進(jìn)入主界面后第一次是會讓我們選擇城市,我們點擊城市的下拉列表選中自己想要查詢的城市,在我們的短信中會出現(xiàn)該城市的天氣并生成樣列短信,最后我們設(shè)置指定的聯(lián)系人并設(shè)置指定的時間發(fā)送短信到指定的聯(lián)系人,當(dāng)短信發(fā)送成功后我們會收到來自通知欄的消息告訴我們短信已經(jīng)發(fā)送成功。</p><p>

25、;<b>  圖2-1系統(tǒng)流程圖</b></p><p>  2.1.2 模塊結(jié)構(gòu)圖</p><p>  App啟動服務(wù) </p><p><b>  設(shè)置相關(guān)信息</b></p><p><b&

26、gt;  天氣信息</b></p><p>  startService(new Intent)</p><p><b>  啟動服務(wù)</b></p><p><b>  圖2-2模塊結(jié)構(gòu)圖</b></p><p><b>  2.2數(shù)據(jù)庫的設(shè)計</b></p

27、><p>  由于在本系統(tǒng)中是通過中央氣象臺的WebService 提供的API訪問得到的天氣預(yù)報,在查詢指定城市的天氣時,需要用到它提供的城市碼,而城市碼相對穩(wěn)定不變,所以在構(gòu)建系統(tǒng)時將其事先通過Android的網(wǎng)絡(luò)訪問技術(shù)將其緩沖到本地SQLite數(shù)據(jù)庫進(jìn)行保存起來,方便以后的查詢,同時節(jié)省了流量開銷。綜上所述在本地建立db_weather.db的數(shù)據(jù)庫,其中的表結(jié)構(gòu)如下:</p><p>

28、;  圖2-3數(shù)據(jù)庫表結(jié)構(gòu)</p><p>  其中只存在兩個表: provices 和citys </p><p>  City 中存在city_num用天氣的查詢,同時還存在外鍵province_id與provices表形成1對n的關(guān)系。</p><p>  2.3 模塊功能設(shè)計</p><p>  2.3.1 獲取當(dāng)前天氣功能</

29、p><p>  顯示指定城市三天內(nèi)的天氣狀況,包括日期、城市名稱、溫度、風(fēng)力,用戶可通過選擇城市來獲取城市天氣,并且可以把天氣編輯成短信。</p><p>  2.3.2 選擇城市的功能</p><p>  通過手動選擇可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫中預(yù)存的城市來進(jìn)行設(shè)置,同時為了方便用戶查找,當(dāng)單擊選中城市時跳轉(zhuǎn)至天氣顯示界面,來顯示該城市當(dāng)三天內(nèi)的天氣狀況。&l

30、t;/p><p>  2.3.3 發(fā)送短信的功能</p><p>  為了使用戶能夠選擇指定的聯(lián)系人,在界面上加上了選擇聯(lián)系人的輸入框,并且還有時間選擇,是用戶能夠設(shè)置在指定的時間發(fā)送短信給指定的人。</p><p><b>  3.運行設(shè)計</b></p><p><b>  3.1用戶界面設(shè)計</b>

31、;</p><p>  根據(jù)需求分析可以知道,應(yīng)用程序應(yīng)包含三個主要的功能,這里需要進(jìn)一步分析每個功能中應(yīng)該具體怎樣實現(xiàn)。</p><p>  在獲取網(wǎng)絡(luò)上的天氣服務(wù)時應(yīng)該做到讀取未來三天的天氣,并把天氣轉(zhuǎn)為短信內(nèi)容示例。當(dāng)然我們可以選擇當(dāng)前城市的信息,設(shè)置省市聯(lián)動的效果,并且我們可以設(shè)置指定聯(lián)系人的信息和在什么時間發(fā)送短信。</p><p>  根據(jù)以上的功能分析

32、得到以下的用戶界面圖:</p><p><b>  圖3-1主界面布局</b></p><p><b>  圖3-2用戶主界面</b></p><p><b>  圖3-3選擇省份</b></p><p><b>  圖3-4選擇城市</b></p&

33、gt;<p><b>  3.2 運行代碼</b></p><p>  根據(jù)天氣預(yù)報系統(tǒng)功能需求分析,系統(tǒng)啟動后,應(yīng)在主界面上呈現(xiàn)出,默認(rèn)城市的天氣數(shù)據(jù),因此需要創(chuàng)建主界面和解析天氣的類,包括獲取、解析城市天氣數(shù)據(jù),并在用戶界面上呈現(xiàn)出來。為此,需要解決的問題是手機終端從Web 服務(wù)器獲取了所有類型的數(shù)據(jù)之后,將這些數(shù)據(jù)進(jìn)一步交給Android 手機終端Vi

34、ew 組件,在手機界面上顯示給用戶。聯(lián)網(wǎng)獲取天氣情況并把天氣情況變?yōu)闃永绦拧V饕峭ㄟ^360天氣預(yù)報的端口從網(wǎng)絡(luò)上解析數(shù)據(jù),并把數(shù)據(jù)保存到本地的數(shù)據(jù)庫中,在從數(shù)據(jù)庫中調(diào)取所需城市的天氣,并把天氣轉(zhuǎn)為示例代碼:</p><p>  //重寫callable接口中的方法call</p><p>  @SuppressLint("SimpleDateFormat"

35、) @Override</p><p>  public String call() throws Exception {</p><p><b>  try {</b></p><p>  //這里使用的是360天氣預(yù)報,比較幾個之后,發(fā)現(xiàn)這個比較靠譜</p><p>  //url最后的101010100 是指北京,

36、在http://cdn.weather.hao.#/頁面選擇想要的城市,url中即可獲取城市編碼101110908</p><p>  //聯(lián)網(wǎng)讀取天氣數(shù)據(jù)</p><p>  //創(chuàng)建連網(wǎng)使用的客戶端連接類httpclient,以及本次請求的封裝對象httpget</p><p>  HttpGet httpGet = new HttpGet(&q

37、uot;http://cdn.weather.hao.#/api_weather_info.php?app=hao360&_jsonp=smartloaddata101010100&code="+code);</p><p>  HttpClient httpClient = new DefaultHttpClient();</p><p>  //執(zhí)行

38、請求并獲取服務(wù)器的響應(yīng)</p><p>  HttpResponse httpResponse = httpClient.execute(httpGet);</p><p>  //獲取http的響應(yīng)碼,判斷本次連接是否成功</p><p>  if (httpResponse.getStatusLine().getStatusCode() == HttpStatu

39、s.SC_OK) {</p><p>  //獲取響應(yīng)數(shù)據(jù)的字符串內(nèi)容并針對字符串進(jìn)行拆分</p><p>  String unicodeResult = EntityUtils.toString(</p><p>  httpResponse.getEntity()).split("\\(")[1]</p><p> 

40、 .split("\\)")[0];</p><p>  // unicode解碼后獲取各節(jié)點的值</p><p><b>  // 獲取市</b></p><p>  //System.out.println(unescapeUnicode(unicodeResult));</p><p>  ti

41、mestamp=(new JSONObject(unicodeResult).getLong("time"));</p><p>  //System.out.println(timestamp);</p><p>  //通過stringbuffer實現(xiàn)字符串的拼接</p><p>  weatherMsg.append(</p>

42、<p>  new JSONObject(unicodeResult).getJSONArray("area")</p><p>  .getString(2).split("\"")[1]).append(";");</p><p>  JSONArray jsonArray = new JSONObjec

43、t(unicodeResult)</p><p>  .getJSONArray("weather");</p><p>  for (int i = 0; i < jsonArray.length(); i++) {</p><p>  JSONObject jsonDay = jsonArray.getJSONObject(i);<

44、;/p><p>  // 獲取日期 幾月幾日</p><p>  weatherMsg.append(sdf2.format(sdf.parse(jsonDay</p><p>  .getString("date"))));</p><p>  JSONObject jsonInfo = jsonDay.getJSONObj

45、ect("info");</p><p>  String[] dayInfo = jsonInfo.getString("day")</p><p>  .split("\"");</p><p>  String[] nightInfo = jsonInfo.getString("n

46、ight").split(</p><p><b>  "\"");</b></p><p>  if (dayInfo[3].equals(nightInfo[3])) {</p><p>  weatherMsg.append(dayInfo[3]).append("#");<

47、;/p><p><b>  } else {</b></p><p>  weatherMsg.append(dayInfo[3]).append("轉(zhuǎn)")</p><p>  .append(nightInfo[3]).append("#");</p><p><b>  

48、}</b></p><p>  if (!(dayInfo[9].equals("微風(fēng)"))) {</p><p>  if (dayInfo[7].equals(nightInfo[7])) {</p><p>  weatherMsg.append(dayInfo[7]);</p><p>  if (da

49、yInfo[9].equals(nightInfo[9])) {</p><p>  weatherMsg.append(dayInfo[9]).append("#");</p><p><b>  } else {</b></p><p>  weatherMsg.append("白天").append

50、(dayInfo[9]);</p><p>  weatherMsg.append("夜間")</p><p>  .append(nightInfo[9]).append("#");</p><p><b>  }</b></p><p><b>  } else {&

51、lt;/b></p><p>  weatherMsg.append("白天").append(dayInfo[7])</p><p>  .append(dayInfo[9]).append("#");</p><p>  if (!(nightInfo[9].equals("微風(fēng)"))) {<

52、;/p><p>  weatherMsg.append("夜間")</p><p>  .append(nightInfo[7])</p><p>  .append(nightInfo[9]).append("#");</p><p><b>  }</b></p>&

53、lt;p><b>  }</b></p><p>  } else if (!(nightInfo[9].equals("微風(fēng)"))) {</p><p>  weatherMsg.append("夜間").append(nightInfo[7])</p><p>  .append(nightIn

54、fo[9]).append("#");</p><p><b>  }</b></p><p>  weatherMsg.append(nightInfo[5]).append("~")</p><p>  .append(dayInfo[5]).append("度;");</p

55、><p><b>  }</b></p><p>  weather = weatherMsg.substring(0, weatherMsg.length() - 1);</p><p>  weathers = weather.split(";");</p><p>  //將weathers數(shù)組轉(zhuǎn)成

56、集合后,toString再轉(zhuǎn)成字符串</p><p>  weather = Arrays.asList(weathers).toString(); // 4 day</p><p>  for(int i=0;weather.length()>70;i++)</p><p><b>  {</b></p><p>

57、;  System.out.println(weather.length());</p><p>  //將數(shù)據(jù)轉(zhuǎn)成集合,然后通過sublist方法截取集合中的部分內(nèi)容后,將截取后的集合toString的到字符串</p><p>  weather = Arrays.asList(weathers).subList(0, Arrays.asList(weathers).size()-i).

58、toString();</p><p><b>  }</b></p><p>  //針對字符串進(jìn)行字符的替換</p><p>  weather = weather.replace("[", "").replace("]", "").replace("

59、 ", "").replace(",", ";").replace("#", ",");</p><p>  //String date = new java.text.SimpleDateFormat("HH:mm").format(new java.util.Date(timest

60、amp * 1000));</p><p>  //weather = weather + ";" + date + "發(fā)布";</p><p>  return weather;</p><p><b>  }</b></p><p>  } catch (Exception e

61、) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return null;</p><p><b>  }</b></p><p>  public String unescapeUnicod

62、e(String str){</p><p>  StringBuffer sb=new StringBuffer();</p><p>  //將字符串根據(jù)制定的正則表達(dá)式進(jìn)行匹配(可簡單的理解為將特殊的字符串根據(jù)指定的方式進(jìn)行拼配后替換)</p><p>  Matcher matcher = Pattern.compile("\\\\u([0-9a-

63、fA-F]{4})").matcher(str);</p><p>  while(matcher.find()){ //如果字符串中包含指定字符</p><p>  //則對字符串進(jìn)行退換操作</p><p>  matcher.appendReplacement(sb, (char)Integer.parseInt(matcher.group(1),

64、16)+""); </p><p><b>  }</b></p><p>  matcher.appendTail(sb);</p><p>  return sb.toString().replace("\\", "");//順便去掉上面的轉(zhuǎn)義字符"\\"&l

65、t;/p><p><b>  }</b></p><p>  根據(jù)天去短信系統(tǒng)的需求分析,選擇城市并獲取天氣的類,通過連接本地的SQLite數(shù)據(jù)庫根據(jù)城市的城市碼來到本地的數(shù)據(jù)庫中找到并把天氣顯示在用戶的界面上,具體實現(xiàn)代碼如下:</p><p>  public void initSpinner1(){</p><p> 

66、 dbm = new DBManager(this);</p><p>  dbm.openDatabase();</p><p>  db = dbm.getDatabase();//獲取數(shù)據(jù)庫對象</p><p>  List<MyListItem> list = new ArrayList<MyListItem>();</p>

67、;<p><b>  try { </b></p><p>  String sql = "select * from provinces"; </p><p>  //查詢數(shù)據(jù)庫中的provinces表中的數(shù)據(jù)</p><p>  Cursor cursor = db.rawQuery(sql,nul

68、l); </p><p>  cursor.moveToFirst();</p><p>  //如果有多行數(shù)據(jù),就循環(huán)讀取表中每一行的數(shù)據(jù)</p><p>  while (!cursor.isLast()){ </p><p>  //獲取表中列名為_id的列中當(dāng)前行的值</p><p>  String cod

69、e=cursor.getString(cursor.getColumnIndex("_id"));</p><p>  System.out.println("initSpinner1"+code);</p><p>  //獲取表中第二列中當(dāng)前行的數(shù)據(jù)值</p><p>  byte bytes[]=cursor.getBl

70、ob(1); </p><p>  String name=new String(bytes,"utf-8");</p><p>  //初始化列表中每個item中要顯示的數(shù)據(jù)封裝類對象</p><p>  MyListItem myListItem=new MyListItem();</p><p>  myListIt

71、em.setName(name);</p><p>  myListItem.setPcode(code);</p><p>  list.add(myListItem);</p><p>  //讓游標(biāo)移動到下一行</p><p>  cursor.moveToNext();</p><p><b>  }

72、</b></p><p>  //如果沒有多行數(shù)據(jù),那么就讀取當(dāng)前行的數(shù)據(jù)</p><p>  String code=cursor.getString(cursor.getColumnIndex("_id")); </p><p>  byte bytes[]=cursor.getBlob(1); </p><p

73、>  String name=new String(bytes,"utf-8");</p><p>  MyListItem myListItem=new MyListItem();</p><p>  myListItem.setName(name);</p><p>  myListItem.setPcode(code);</p&

74、gt;<p>  list.add(myListItem); </p><p>  } catch (Exception e) { </p><p><b>  } </b></p><p>  MyAdapter myAdapter = new MyAdapter(this,list);</p><p>

75、;  spinner1.setAdapter(myAdapter);</p><p>  String sql = "select province_id from citys where city_num='"+areaCode+"'";</p><p>  //查詢數(shù)據(jù)庫中指定城市的province_id</p>&

76、lt;p>  Cursor cursor = db.rawQuery(sql,null);</p><p>  cursor.moveToFirst();//將游標(biāo)移動到表中第一行</p><p>  spinner1.setSelection(cursor.getInt(0), true);//設(shè)置spinner默認(rèn)選項</p><p>  //設(shè)置spin

77、ner的選擇事件</p><p>  spinner1.setOnItemSelectedListener(new SpinnerOnSelectedListener1());</p><p><b>  //關(guān)閉數(shù)據(jù)庫</b></p><p>  dbm.closeDatabase();</p><p>  db.cl

78、ose();</p><p>  String pcode = String.valueOf(cursor.getInt(0)+1);</p><p>  initSpinner2(pcode);</p><p><b>  }</b></p><p>  public void initSpinner2(String

79、 pcode){</p><p>  dbm = new DBManager(this);</p><p>  dbm.openDatabase();</p><p>  db = dbm.getDatabase();</p><p>  List<MyListItem> list = new ArrayList<MyLis

80、tItem>();</p><p>  String dstName="";</p><p>  int idx=0;</p><p>  int found=0;</p><p><b>  {</b></p><p>  String sql = "sele

81、ct name from citys where city_num='"+areaCode+"'";</p><p>  //查詢指定城市的城市名</p><p>  Cursor cursor = db.rawQuery(sql,null);</p><p>  cursor.moveToFirst();</p&

82、gt;<p>  byte bytes[]=cursor.getBlob(0);</p><p><b>  try {</b></p><p>  dstName = new String(bytes,"utf-8");</p><p>  } catch (UnsupportedEncodingExcept

83、ion e) {</p><p>  // TODO Auto-generated catch block</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p>  pco

84、de = String.valueOf(Integer.valueOf(pcode).intValue() - 1);</p><p><b>  try {</b></p><p>  String sql = "select * from citys where province_id='"+pcode+"'"

85、;; </p><p>  //查詢表中指定省份所有城市的城市信息</p><p>  Cursor cursor = db.rawQuery(sql,null); </p><p>  cursor.moveToFirst();</p><p>  while (!cursor.isLast()){ </p><p&

86、gt;  String code=cursor.getString(cursor.getColumnIndex("_id")); </p><p>  byte bytes[]=cursor.getBlob(2); </p><p>  String name=new String(bytes,"utf-8");</p><p&g

87、t;  String city_num = cursor.getString(cursor.getColumnIndex("city_num"));</p><p>  if(0==found)</p><p><b>  {</b></p><p>  if(!dstName.equals(name))</p>

88、<p><b>  {</b></p><p><b>  idx += 1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b><

89、/p><p><b>  found=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  MyListItem myListItem=new MyListItem();</p><p>  myL

90、istItem.setName(name);</p><p>  myListItem.setPcode(code);</p><p>  myListItem.setCityNum(city_num);</p><p>  list.add(myListItem);</p><p>  cursor.moveToNext();</p&

91、gt;<p><b>  }</b></p><p>  String code=cursor.getString(cursor.getColumnIndex("_id")); </p><p>  byte bytes[]=cursor.getBlob(2); </p><p>  String name=n

92、ew String(bytes,"utf-8");</p><p>  String city_num = cursor.getString(cursor.getColumnIndex("city_num"));</p><p>  MyListItem myListItem=new MyListItem();</p><p>

93、;  myListItem.setName(name);</p><p>  myListItem.setPcode(code);</p><p>  myListItem.setCityNum(city_num);</p><p>  list.add(myListItem);</p><p>  } catch (Exception e)

94、 { </p><p><b>  } </b></p><p>  MyAdapter myAdapter = new MyAdapter(this,list);</p><p>  spinner2.setAdapter(myAdapter);</p><p>  spinner2.setSelection(idx

95、, true);</p><p>  spinner2.setOnItemSelectedListener(new SpinnerOnSelectedListener2());</p><p>  dbm.closeDatabase();</p><p>  db.close();</p><p><b>  }</b>

96、;</p><p>  class SpinnerOnSelectedListener1 implements OnItemSelectedListener{</p><p>  public void onItemSelected(AdapterView<?> adapterView, View view, int position,</p><p>

97、  long id) {</p><p>  //獲取spinner選擇的item選項</p><p>  String pcode =((MyListItem) adapterView.getItemAtPosition(position)).getPcode();</p><p>  initSpinner2(pcode);</p><p&g

98、t;<b>  }</b></p><p>  public void onNothingSelected(AdapterView<?> adapterView) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></p

99、><p><b>  }</b></p><p>  class SpinnerOnSelectedListener2 implements OnItemSelectedListener{</p><p>  public void onItemSelected(AdapterView<?> adapterView, View view

100、, int position,</p><p>  long id) {</p><p>  String city_num =((MyListItem) adapterView.getItemAtPosition(position)).getCityNum();</p><p>  areaCode = city_num;</p><p>

101、<b>  }</b></p><p>  public void onNothingSelected(AdapterView<?> adapterView) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></p&g

102、t;<p><b>  }</b></p><p>  //設(shè)置點擊菜單鍵時的顯示內(nèi)容</p><p><b>  @Override</b></p><p>  public boolean onCreateOptionsMenu(Menu menu) {</p><p>  //

103、Inflate the menu; this adds items to the action bar if it is present.</p><p>  getMenuInflater().inflate(R.menu.main, menu);</p><p>  return true;</p><p><b>  }</b></

104、p><p>  //設(shè)置菜單選項選中時的事件監(jiān)聽</p><p><b>  @Override</b></p><p>  public boolean onOptionsItemSelected(MenuItem item) {</p><p>  // Handle action bar item clicks her

105、e. The action bar will</p><p>  // automatically handle clicks on the Home/Up button, so long</p><p>  // as you specify a parent activity in AndroidManifest.xml.</p><p>  int id =

106、item.getItemId();</p><p>  if (id == R.id.action_settings) {</p><p>  String info="作者:丁柏林\nE-MAIL:1183084407@qq.com";</p><p>  new AlertDialog.Builder(MainActivity.this).s

107、etTitle("關(guān)于").setMessage(info).setPositiveButton("確定", null).show();</p><p>  return true;</p><p><b>  }</b></p><p>  return super.onOptionsItemSelec

108、ted(item);</p><p><b>  }</b></p><p>  獲取天氣后生成短信,以下代碼實現(xiàn)了怎樣發(fā)送短信的功能:</p><p>  public class SendSms {</p><p><b>  /*</b></p><p>  * 以下代

109、碼均為實現(xiàn)發(fā)送短信的代碼</p><p><b>  * */</b></p><p>  SmsManager smsManager = SmsManager.getDefault();</p><p>  public boolean sendMessage(String phoneCode, String content,PendingI

110、ntent sentIntent) {</p><p>  if (content.length() > 70) {</p><p>  List<String> weatherList = smsManager.divideMessage(content);</p><p>  for (String str : weatherList) {&l

111、t;/p><p>  smsManager.sendTextMessage(phoneCode, null, str, sentIntent,</p><p><b>  null);</b></p><p><b>  }</b></p><p><b>  } else {</b&g

112、t;</p><p>  smsManager.sendTextMessage(phoneCode, null, content, sentIntent,</p><p><b>  null);</b></p><p><b>  }</b></p><p>  return false;<

113、/p><p><b>  }</b></p><p><b>  }</b></p><p>  存儲和讀取文件的類:</p><p>  public class DataFile {</p><p>  private Context context;</p>

114、<p>  final private String FILE_NAME="weather.dat";</p><p>  public DataFile(Context context) {</p><p>  this.context = context;</p><p><b>  }</b></p&g

115、t;<p><b>  //存儲數(shù)據(jù)到文件</b></p><p>  public void saveData(String data) throws Exception{</p><p>  //context.getFilesDir();// 得到存放文件的系統(tǒng)目錄 /data/data/<package name>/files<

116、/p><p>  //context.getCacheDir(); //緩存目錄 /data/data/<package name>/cache</p><p>  /*獲取文件輸出流,方便將數(shù)據(jù)寫入指定文件中*/</p><p>  FileOutputStream outputStream=context.openFileOutput(FILE_NAM

117、E, Context.MODE_PRIVATE);</p><p><b>  //寫入數(shù)據(jù)</b></p><p>  outputStream.write(data.getBytes());</p><p><b>  //關(guān)閉流</b></p><p>  outputStream.close

118、();</p><p><b>  }</b></p><p><b>  // 讀取數(shù)據(jù)</b></p><p>  public String getData() throws Exception{</p><p>  //獲取指定文件的輸入流,文件存儲位置:/data/data/<pac

119、kage name>/files/FILE_NAME</p><p>  FileInputStream inputStream=context.openFileInput(FILE_NAME);</p><p>  //得到緩存輸出流對象</p><p>  ByteArrayOutputStream outStream=new ByteArrayOutpu

120、tStream();</p><p>  byte[] buffer=new byte[1024];</p><p>  int len=0;</p><p>  while ((len=inputStream.read(buffer))!=-1){</p><p>  //將讀取的內(nèi)容寫入緩存輸出流中</p><p>

121、;  outStream.write(buffer, 0, len);</p><p><b>  }</b></p><p>  outStream.close();</p><p>  //得到輸出流中的數(shù)據(jù)byte數(shù)組</p><p>  byte[] data=outStream.toByteArray();&l

122、t;/p><p>  //講數(shù)組轉(zhuǎn)成字符串并返回</p><p>  String name=new String(data);</p><p>  return name;</p><p><b>  }</b></p><p><b>  }</b></p>&

123、lt;p><b>  數(shù)據(jù)庫的管理類:</b></p><p>  public class DBManager {</p><p>  private final int BUFFER_SIZE = 1024;</p><p>  public static final String DB_NAME = "city_cn.s3

124、db";</p><p>  public static final String PACKAGE_NAME = "com.example.weathertest";</p><p>  //定義數(shù)據(jù)庫文件存儲路徑:data/data/程序包名</p><p>  public static final String DB_PATH =

125、 "/data"</p><p>  + Environment.getDataDirectory().getAbsolutePath() + "/"+ PACKAGE_NAME;</p><p>  private SQLiteDatabase database; //定義數(shù)據(jù)庫對象</p><p>  private C

126、ontext context;</p><p>  private File file=null;</p><p>  DBManager(Context context) {</p><p>  Log.e("cc", "DBManager");</p><p>  this.context = co

127、ntext;</p><p><b>  }</b></p><p>  public void openDatabase() {</p><p>  Log.e("cc", "openDatabase()"+DB_PATH + "/" + DB_NAME);</p>&

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論