網(wǎng)絡(luò)請求(六)

Retrofit源碼探討

前面一篇介紹了Retrofit的基本用法仔蝌,再結(jié)合前面的Okhttp的研究,那么Retrofit框架绷柒,其實(shí)主要就是以接口的形式封裝了Okhttp的請求,這包括它的請求參數(shù)和接口的封裝。

String baseUrl ="http://ip.taobao.com";

Retrofit retrofit =new Retrofit.Builder()

.baseUrl(baseUrl)

.addConverterFactory(GsonConverterFactory.create())

.build();

APIService apiService = retrofit.create(APIService.class);

Call call = apiService.getIpInfo(ip);

同樣幔摸,Retrofit也是采用了建造者模式,通過Retrofit.Builder()添加各種需要的配置信息颤练,最后.build()方法構(gòu)建了Retrofit對象既忆,Retrofit對象里面包含了一下內(nèi)容:

Retrofit

最主要的就是okhttp3對象本身和處理返回信息的Converter。

接下來是拿到retrofit對象調(diào)用create(APIService.class)創(chuàng)建請求接口文件嗦玖,

create方法

這個方法里面用Platform生成返回對象患雇,它里面用試錯的方式生成實(shí)際的Platform對象,然后在這個平臺下去實(shí)例化APIService.class宇挫,最后返回loadMethodHandler(method).invoke(args)對象苛吱,這個OkHttpCall對象實(shí)際上是實(shí)現(xiàn)了OkHttp的Call接口的對象,也就是說apiService是個OkHttpCall類型的器瘪。

loadMethodHandler(method).invoke(args)

然后翠储,apiService.getIpInfo(ip)拿到了具體的OkHttp的Call對象,接下來就可以進(jìn)行網(wǎng)絡(luò)請求了橡疼。

這是Retrofit接口請求的部分援所,接下來看看參數(shù)的部分。請求方式和參數(shù)的部分都是在APIService中欣除,也就是在實(shí)例化的時候使用的住拭,我們就追蹤這個Service參數(shù)。

一個是Platform的invokeDefaultMethod方法历帚,一個是loadMethodHandler(method).invoke(args)方法中的args滔岳。前面的方法返回的是一個Object(APIService)對象,后面一個是將args傳入OkHttpCall對象中也是作為Object對象挽牢。我們就看看在OkHttpCall中Object是怎么使用的谱煤。


createRawCall

就是在enqueue方法中調(diào)用createRawCall的方法是用了object.

createRawCall

這個方法是生成了OKHttp的call對象,跟著進(jìn)入requestFactory.create(args)方法看一看卓研。

requestFactory.create(args)方法

這個方法里面的RequestAction使用了傳遞過來的Object參數(shù)趴俘,RequestAction里面有幾個關(guān)于請求體的類,如Field奏赘,F(xiàn)ieldMap寥闪,Query,QueryMap磨淌,StringUrl疲憋,Header,Path等梁只,各個里面有都繼承RequestAction實(shí)現(xiàn)抽象的perform方法缚柳,那就舉例看一下Query的perform方法吧埃脏。


Query的perform方法


RequestBuilder的addQueryParam方法

這里面又有個HttpUrl.BuilderurlBuilder,再進(jìn)去看它的addEncodedQueryParameter方法:

HttpUrl.BuilderurlBuilder的addEncodedQueryParameter

encodedQueryNamesAndValues就是個List集合秋忙,順著看下去最終目的就是把參數(shù)變成String類型添加到這個集合里去彩掐,然后這個集合作為參數(shù)復(fù)制到okhttp3的HttpUrl中使用:

HttpUrl構(gòu)造方法

到此,Retorfit就捋完了灰追。

總結(jié):Retorfit就是按照okhttp3的思想進(jìn)行的封裝堵幽,充分體現(xiàn)了restfull思想,用起來挺方便的弹澎。不過朴下,還是先掌握okhttp3再使用Retorfit會更好些。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苦蒿,一起剝皮案震驚了整個濱河市殴胧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佩迟,老刑警劉巖团滥,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異音五,居然都是意外死亡惫撰,警方通過查閱死者的電腦和手機(jī)羔沙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門躺涝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扼雏,你說我怎么就攤上這事坚嗜。” “怎么了诗充?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵苍蔬,是天一觀的道長。 經(jīng)常有香客問我蝴蜓,道長碟绑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任茎匠,我火速辦了婚禮格仲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诵冒。我一直安慰自己凯肋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布汽馋。 她就那樣靜靜地躺著侮东,像睡著了一般圈盔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上悄雅,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天驱敲,我揣著相機(jī)與錄音,去河邊找鬼宽闲。 笑死癌佩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的便锨。 我是一名探鬼主播围辙,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼放案!你這毒婦竟也來了姚建?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤吱殉,失蹤者是張志新(化名)和其女友劉穎掸冤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體友雳,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稿湿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了押赊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饺藤。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖流礁,靈堂內(nèi)的尸體忽然破棺而出涕俗,到底是詐尸還是另有隱情,我是刑警寧澤神帅,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布再姑,位于F島的核電站,受9級特大地震影響找御,放射性物質(zhì)發(fā)生泄漏元镀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一霎桅、第九天 我趴在偏房一處隱蔽的房頂上張望栖疑。 院中可真熱鬧,春花似錦哆档、人聲如沸蔽挠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澳淑。三九已至比原,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杠巡,已是汗流浹背量窘。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氢拥,地道東北人蚌铜。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像嫩海,于是被迫代替她去往敵國和親冬殃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

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

  • 適配器模式上一篇文章我們已經(jīng)分析了Retrofit解析注解封裝進(jìn)ServiceMethod的流程叁怪,讀者在這里要記住...
    andcoder閱讀 662評論 0 2
  • 整體Retrofit內(nèi)容如下: 1审葬、Retrofit解析1之前哨站——理解RESTful2、Retrofit解析2...
    隔壁老李頭閱讀 3,987評論 8 19
  • 前言 使用Retrofit已經(jīng)一段時間了奕谭,這貨挺好用的涣觉,還很特別,特別是使用接口來定義請求方式血柳,這用法讓我對它的源...
    帶心情去旅行閱讀 3,362評論 3 21
  • Retrofit這個開源庫出來也有一定年頭了官册,記得之前還是在V1.0的版本的時候,之前在三月份也寫過一個Retro...
    lovejjfg閱讀 1,450評論 0 5
  • 黎明的曙光难捌, 穿透虛偽的心臟膝宁。 那滴血, 吞噬了朝霞栖榨, 那張青面獠牙的面孔昆汹, 隨風(fēng)施虐著那片云彩明刷; 晨露在光影中婴栽,...
    王寧子閱讀 410評論 4 5