使用OkHttp和Gson進(jìn)行簡(jiǎn)單網(wǎng)絡(luò)請(qǐng)求與解析

? ? ? 剛畢業(yè)參加工作那會(huì)兒前联,缺乏Android開源項(xiàng)目經(jīng)驗(yàn)失息,工作中發(fā)現(xiàn)一些經(jīng)典開源項(xiàng)目比如OKHttp骏庸,Picasso戚啥,還有一些快速開發(fā)注解框架LoonAndroid等等已經(jīng)相當(dāng)流行杂数,在這些開源庫(kù)之上進(jìn)行開發(fā)可以節(jié)省大量時(shí)間。

? ? ? 對(duì)于初學(xué)者朋友來(lái)說瘸洛,熟悉OKhttp揍移、Gson的使用并簡(jiǎn)單封裝,來(lái)實(shí)現(xiàn)自己的網(wǎng)絡(luò)請(qǐng)求和解析應(yīng)該是比較有必要反肋,我們今天就來(lái)實(shí)現(xiàn)一下那伐。

一、在項(xiàng)目中引入Okhttp3的相關(guān)jar包

引入okhttp依賴

?okhttp3的下載地址:https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/3.9.0? ? ? ? ? ?okio的下載地址:https://mvnrepository.com/artifact/com.squareup.okio/okio

? ? ?需要注意的是okhttp3依賴于okio石蔗,而且要注意okio的版本罕邀。缺少okio相關(guān)的庫(kù)或者引入okio的版本不對(duì),都有可能在運(yùn)行時(shí)報(bào)錯(cuò)养距。我第一次引入了okio-2.0.0-RC1.jar诉探,報(bào)了Kotlin相關(guān)錯(cuò)誤,實(shí)在令人費(fèi)解铃在,后面改為引入okio-1.13.0.jar這個(gè)版本就正常了阵具。

二碍遍、創(chuàng)建網(wǎng)絡(luò)請(qǐng)求封裝類HttpEntity

GET請(qǐng)求方法

? ? ?1定铜、GET請(qǐng)求方法:如代碼所示,整個(gè)請(qǐng)求和返回中有三個(gè)要素:okhttpClient怕敬、request揣炕、callback。分別是請(qǐng)求發(fā)起體东跪,請(qǐng)求內(nèi)容體畸陡,請(qǐng)求返回接收體。例如虽填,我們需要的請(qǐng)求目標(biāo)地址為?HttpConstant.URL丁恭;我們先通過Builer設(shè)定請(qǐng)求體okHttpClient的網(wǎng)絡(luò)連接超時(shí)、網(wǎng)頁(yè)內(nèi)容讀取超時(shí)參數(shù)斋日,并實(shí)例化牲览;然后將目標(biāo)地址URL、請(qǐng)求方式(如果不設(shè)定恶守,如上述代碼第献,那么默認(rèn)就是“GET”方式)寫入請(qǐng)求體request。當(dāng)需要請(qǐng)求時(shí)兔港,就調(diào)用上圖中封裝的request()方法庸毫,就可以通過請(qǐng)求體將內(nèi)容發(fā)送出去,并在傳入的callBack對(duì)象中接收返回了衫樊。


POST請(qǐng)求方法

? ? ?2飒赃、POST請(qǐng)求方法:與GET請(qǐng)求方法類似,只不過需要通過RequestBody設(shè)定請(qǐng)求內(nèi)容,并通過request的.method方法傳入請(qǐng)求方式和請(qǐng)求體载佳。同樣的需要傳入callBack對(duì)象來(lái)接收返回晋被。

三、使用GSON將網(wǎng)絡(luò)返回的json字符串轉(zhuǎn)為對(duì)象

? ?gson2.7的下載地址:https://mvnrepository.com/artifact/com.google.code.gson/gson/2.7? ?

? ?下載之別忘記在項(xiàng)目中引入依賴刚盈,完成以上準(zhǔn)備工作之后羡洛,我們嘗試使用GET方式請(qǐng)求上面那個(gè)公共天氣接口,代碼及得到返回結(jié)果如下:


發(fā)起網(wǎng)絡(luò)請(qǐng)求


返回結(jié)果

成功得到返回結(jié)果字符串藕漱,下面我們嘗試將json字符串轉(zhuǎn)化為Object對(duì)象欲侮。經(jīng)JSON在線格式化工具處理,得到此JSON字符串大致的結(jié)構(gòu)肋联,下一步我面根據(jù)此結(jié)構(gòu)來(lái)編寫數(shù)據(jù)類來(lái)進(jìn)行接收威蕉。


返回結(jié)果的JSON結(jié)構(gòu)


根據(jù)json返回?cái)?shù)據(jù)構(gòu)造的數(shù)據(jù)類

? ? ?我們根據(jù)返回的JSON數(shù)據(jù)的結(jié)構(gòu),編寫了三個(gè)類橄仍,分別是WeatherData韧涨、TodayWeatherData、BaseWeatherData侮繁,它們均繼承自用于標(biāo)識(shí)結(jié)構(gòu)層級(jí)的BaseData虑粥,根據(jù)結(jié)構(gòu)那么是WeatherData對(duì)象中包含一些數(shù)據(jù)和TodayWeatherData對(duì)象,TodayWeatherData對(duì)象中包含一些數(shù)據(jù)和BaseWeatherData對(duì)象及數(shù)組宪哩。下面我們使用GSON將上述字符串轉(zhuǎn)換成對(duì)象娩贷。

json轉(zhuǎn)對(duì)象

我們?cè)囋嚱Y(jié)果:

json轉(zhuǎn)換結(jié)果

? ? 到此我們已經(jīng)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的OKHTTP+GSON進(jìn)行網(wǎng)絡(luò)請(qǐng)求解析的例子,得到的對(duì)象如果需要進(jìn)程間傳遞锁孟,那么可以實(shí)現(xiàn)Serializable或者Parcelable接口進(jìn)行序列化彬祖,這部分的內(nèi)容我們后續(xù)再探究。

? ? 完整Demo源碼:https://github.com/zhaoyan1994/AndroidOkHttpDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末品抽,一起剝皮案震驚了整個(gè)濱河市储笑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌圆恤,老刑警劉巖突倍,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哑了,居然都是意外死亡赘方,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門弱左,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窄陡,“玉大人,你說我怎么就攤上這事拆火√玻” “怎么了涂圆?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)币叹。 經(jīng)常有香客問我润歉,道長(zhǎng),這世上最難降的妖魔是什么颈抚? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任踩衩,我火速辦了婚禮,結(jié)果婚禮上贩汉,老公的妹妹穿的比我還像新娘驱富。我一直安慰自己,他們只是感情好匹舞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布褐鸥。 她就那樣靜靜地躺著,像睡著了一般赐稽。 火紅的嫁衣襯著肌膚如雪叫榕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天姊舵,我揣著相機(jī)與錄音晰绎,去河邊找鬼。 笑死蠢莺,一個(gè)胖子當(dāng)著我的面吹牛寒匙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躏将,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼考蕾!你這毒婦竟也來(lái)了祸憋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肖卧,失蹤者是張志新(化名)和其女友劉穎蚯窥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塞帐,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拦赠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葵姥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荷鼠。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖榔幸,靈堂內(nèi)的尸體忽然破棺而出允乐,到底是詐尸還是另有隱情矮嫉,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布牍疏,位于F島的核電站蠢笋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳞陨。R本人自食惡果不足惜昨寞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厦滤。 院中可真熱鬧编矾,春花似錦、人聲如沸馁害。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碘菜。三九已至凹蜈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忍啸,已是汗流浹背仰坦。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留计雌,地道東北人悄晃。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像凿滤,于是被迫代替她去往敵國(guó)和親妈橄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 參考Android網(wǎng)絡(luò)請(qǐng)求心路歷程Android Http接地氣網(wǎng)絡(luò)請(qǐng)求(HttpURLConnection) 一...
    合肥黑閱讀 21,234評(píng)論 7 63
  • 6.1 公鑰密鑰加密原理 6.1.1 基礎(chǔ)知識(shí) 密鑰:一般就是一個(gè)字符串或數(shù)字翁脆,在加密或者解密時(shí)傳遞給加密/解密算...
    AndroidMaster閱讀 4,003評(píng)論 1 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理眷蚓,服務(wù)發(fā)現(xiàn),斷路器反番,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 參考資源 官網(wǎng) 國(guó)內(nèi)博客 GitHub官網(wǎng) 鑒于一些關(guān)于OKHttp3源碼的解析文檔過于碎片化沙热,本文系統(tǒng)的,由淺入...
    風(fēng)骨依存閱讀 12,470評(píng)論 11 82
  • 一罢缸、簡(jiǎn)介 HttpClient是Apache基金會(huì)的一個(gè)開源網(wǎng)絡(luò)庫(kù)篙贸,功能十分強(qiáng)大,API數(shù)量眾多枫疆,但正是由于龐大的...
    AndroidMaster閱讀 3,035評(píng)論 0 4