Android簡易天氣預報

和之前的內(nèi)容一樣,Android簡易打地鼠卵慰,也是通過小軟件的方式來鞏固android知識

先看下效果缩歪,其實主要就一張圖,但是設(shè)計到的知識點還是很多的


Screenshot_20160805-200710.png

應用介紹:

一個相對比較簡單的天氣預報項目罩句,涉及兩個界面焚刺,主界面用于顯示當日天氣和后5天的天氣情況,點擊搜索會進入添加城市界面门烂, 該界面僅有 一個輸入框乳愉,輸入城市后再次點擊搜索會返回到主界面,并根據(jù)輸入的城市信息進行數(shù)據(jù)更新诅福。點擊更新則會刷新當 前數(shù)據(jù)匾委,由于應用目前沒有添加本地保存的功能,如果添加的話氓润,應該會采用SharedPreferences將選擇的城市對應的編碼保存到本地(之前的Android簡易老虎機就是使用這個保存游戲數(shù)據(jù))赂乐,這樣在每次打開軟件的時候先讀取本地保存信息并進行相應更新,如果沒讀取到咖气,則默認為顯示武漢的天氣

涉及到的知識點:

首先是HTTP請求挨措,因為需要從網(wǎng)絡(luò)獲取天氣數(shù)據(jù),采用的是HttpURLConnection崩溪,同時將獲取到的天氣信息轉(zhuǎn)化為字符串 浅役,小結(jié)如下
1.new一個URL的對象,并傳入目標網(wǎng)址
URL url = new URL("http://www.baidu.com");
2.使用URL對象開啟連接伶唯,并轉(zhuǎn)型為HttpURLConnection
HttpURLConnection connection = (HtttpURLConnection)url.openConnection();
3.設(shè)置HTTP的請求方法GET或者POST
connection.setRequestMethod("GET");
4.設(shè)置連接超時觉既、讀取超時的時間等
connection.setConnectionTimeout(8000); connection.setConnectionReadTimeout(8000);
5.連接服務(wù)器 connection.connect();
6.開啟輸入流,獲得服務(wù)器返回的信息
InputStream in = connection.getInputStream();
7.使用disconnection()方法關(guān)閉HTTP連接 connection.disconection();

**使用JSON數(shù)據(jù)解析,使用JSONObject類將獲取到的JSON型數(shù)據(jù)進行解析瞪讼,得到所需的天氣信息 **
json數(shù)據(jù)的格式:
{ }中包含的即為JSON對象, [ ]代表JSON對象的數(shù)組 钧椰,里面可以存放一系列JSON對 象,如: [{ "name":"tom", "age":"20" }]
一般可能在 [ ] 前面還有一個字符串 比如 information :[ ]
在解析時,要到達 [ ] 里面開始解析
1.JSONObject rootObject = new JSONObject(dataStr); // 得到數(shù)據(jù)的根對象
2.JSONObject json = rootObject.getJSONObject("information"); //取出 information中的值
3.然后直接使用 json.getString(" key "); //key為對應數(shù)據(jù)的鍵符欠,就可以得到對應的數(shù)據(jù)

**在子線程中更新界面天氣信息嫡霞,界面中間當日天氣顯示較為詳細,后5天的天氣放在一個HorizontalScrollView中希柿,實現(xiàn)水平滾 動查看天氣信息 **

**更新是為ImageView設(shè)置監(jiān)聽器诊沪,點擊后會啟動一個動畫,即更新圖標的轉(zhuǎn)動曾撤,該處是采用了Animation來實現(xiàn)圖標的轉(zhuǎn)動動畫端姚, 動畫開啟后使用一個Handler對象的延時操作,在1s后關(guān)閉該動畫盾戴,也就是說每次點擊寄锐,理論上圖標都會轉(zhuǎn)動1s然后停止 **
new Handler().postDelayed(new Runnable(){ @Override public void run(){ //要執(zhí)行的操作 } },delayedTime)

點擊搜索后進入添加城市界面,目前只能手動輸入城市名尖啡,采用的是在程序內(nèi)部放置了包含城市名和對應的城市編號的XML文件橄仆, 所以自然需要使用到XML解析,本次使用的是pull解析衅斩,在進入添加城市界面后盆顾,系統(tǒng)會首先獲取到所有的城市信息,即解析XML 數(shù)據(jù)畏梆,解析到的數(shù)據(jù)是采用鍵值對的方式放入到Map中進行存儲的您宪,城市名為鍵,城市編號為值奠涌,在輸入正確的城市后宪巨,點擊搜 索會返回到主界面,同時根據(jù)輸入的城市名(鍵)溜畅,獲取到對應的城市編號(值)捏卓,該處用到了回值傳遞,在返回到主界面的同 時則會把城市編碼傳遞過來慈格,并根據(jù)獲取的城市編碼重新通過HTTP連接獲取到新的數(shù)據(jù)怠晴,并進行更新
使用pull解析
1.首先構(gòu)建一個pull解析器工廠
XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
2.從工廠中構(gòu)建一個pull解析器
XmlPullParser parse= factory.newInstance();
3.設(shè)置輸入信息 parse.setInput(is, "UTF-8");其中is是一個輸入流對象,當然可以通過getAssets().open("file");打開資產(chǎn)文件中的文件以獲得一個輸入流對象
4.定義一個事件類型int eventType = parse.getEventType();
5.開始遍歷XML浴捆,得設(shè)置一個while循環(huán)蒜田,只要事件類型不是結(jié)束的事件類型,那么一直讀取
while(eventType != XmlPullParser.END_DOCUMENT){ }
6.在上面的循環(huán)中開始讀取选泻,得設(shè)置一個判斷冲粤,判斷當前讀取的標簽是否是開始標簽
if(eventType == XmlPullPaser.START_TAG){ }
7.當上訴判斷的是開始標簽美莫,即說明已經(jīng)開始讀取正文部分,此時應該定義一個字符串用于表示讀取的標簽的標識
String tag = parse.getName();
這時需要設(shè)置一個判斷色解,用于確認標簽的標識是包裹所需數(shù)據(jù)的標簽
if(tag.equals("key")){ //假設(shè)此處的key是XML中的包裹所需數(shù)據(jù)的那個標簽 String key = parse.nextText(); //由名字也可以看出來茂嗓,nextText(),該標簽下一位的文本餐茵,也就是數(shù)據(jù)了 }
8.可以把parse理解為一個游標吧科阎,注意上面的問題,判斷如果是包裹所需數(shù)據(jù)的標簽忿族,那么讀取它下一位的文本數(shù)據(jù)锣笨,但是一般不會只有一個數(shù)據(jù),所以還是得繼續(xù)讀取道批,為了循環(huán)讀取错英,那么在當前數(shù)據(jù)讀取后,游標應該往下再移動一位,同時更新eventType 即
paese.next(); eventType = parser.getEventType();
總代碼:
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parse= factory.newInstance(); parse.setInput(is, "UTF-8"); int eventType = parse.getEventType(); while(eventType != XmlPullParser.END_DOCUMENT){ if(eventType == XmlPullPaser.START_TAG){ String tag = parse.getName(); if(tag.equals("key")){ String key = parse.nextText(); } } paese.next(); eventType = parser.getEventType(); }

遇到的問題:在建立assets文件夾時隆豹,把它建在了res目錄下椭岩,結(jié)果總是讀取不到XML文件對應的信息,以為是解析代碼寫錯了璃赡,但是系統(tǒng)并沒報任何錯誤判哥,折騰好久才發(fā)現(xiàn)是這個問題,應該和res放置在同等位置

小結(jié):這次的相比之前的小軟件碉考,主要就是涉及到了網(wǎng)絡(luò)和數(shù)據(jù)解析塌计,源碼放在GitHubWeather ,當然了,肯定還是有不少缺陷的侯谁,希望有興趣的童鞋一起改正一起進步哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锌仅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子墙贱,更是在濱河造成了極大的恐慌热芹,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惨撇,死亡現(xiàn)場離奇詭異伊脓,居然都是意外死亡,警方通過查閱死者的電腦和手機串纺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門丽旅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纺棺,你說我怎么就攤上這事榄笙。” “怎么了祷蝌?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵茅撞,是天一觀的道長。 經(jīng)常有香客問我,道長米丘,這世上最難降的妖魔是什么剑令? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮拄查,結(jié)果婚禮上吁津,老公的妹妹穿的比我還像新娘。我一直安慰自己堕扶,他們只是感情好碍脏,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稍算,像睡著了一般典尾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糊探,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天钾埂,我揣著相機與錄音,去河邊找鬼科平。 笑死褥紫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的匠抗。 我是一名探鬼主播故源,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼汞贸!你這毒婦竟也來了绳军?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤矢腻,失蹤者是張志新(化名)和其女友劉穎门驾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體多柑,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡奶是,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了竣灌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聂沙。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖初嘹,靈堂內(nèi)的尸體忽然破棺而出及汉,到底是詐尸還是另有隱情,我是刑警寧澤屯烦,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布坷随,位于F島的核電站房铭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏温眉。R本人自食惡果不足惜缸匪,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望类溢。 院中可真熱鬧凌蔬,春花似錦、人聲如沸豌骏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窃躲。三九已至,卻和暖如春钦睡,著一層夾襖步出監(jiān)牢的瞬間蒂窒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工荞怒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洒琢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓褐桌,卻偏偏與公主長得像衰抑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荧嵌,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理呛踊,服務(wù)發(fā)現(xiàn),斷路器啦撮,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,851評論 25 707
  • 1 XML解析No29 【 XML:可拓展標記語言伤溉,語言和HTML類似实束,也是一種標記語言。 特點:標記是自定義...
    征程_Journey閱讀 1,632評論 0 9
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件橘洞、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 星期天的中午,上中學的女兒抚笔,補完課放學一進門就喊:“媽媽病游,我對柳絮過敏,你給我買一個口罩狭吼,看看我的臉都撓腫了”层坠。 ...
    粉色的桃林閱讀 664評論 0 10