基于RxJava和Retrofit的二次封裝

前言:

在幾個(gè)月前霎挟,我曾經(jīng)也寫(xiě)過(guò)這樣的一篇文章窝剖,后來(lái)回頭看的時(shí)候,發(fā)現(xiàn)寫(xiě)的真的是太糟糕了酥夭,很多地方?jīng)]有寫(xiě)出說(shuō)明赐纱,而且封裝的思路等也沒(méi)寫(xiě)出來(lái),因此熬北,決定重新寫(xiě)疙描。


1.為什么要封裝?
簡(jiǎn)單粗暴一句話(huà):減少代碼量讶隐,方便調(diào)用和維護(hù)
2.封裝的步驟:
①:定義一個(gè)實(shí)體類(lèi)起胰,統(tǒng)一存放請(qǐng)求得到的數(shù)據(jù)(數(shù)據(jù)需要和后臺(tái)達(dá)成一致)
②:定義一個(gè)類(lèi),用來(lái)存放網(wǎng)絡(luò)請(qǐng)求的地址
③:定義一個(gè)類(lèi)巫延,用來(lái)統(tǒng)一處理網(wǎng)絡(luò)請(qǐng)求
④:定義一個(gè)類(lèi)效五,用來(lái)處理網(wǎng)絡(luò)請(qǐng)求前,請(qǐng)求后烈评,包括請(qǐng)求失敗火俄,請(qǐng)求成功,沒(méi)有網(wǎng)絡(luò)的情況
⑤:定義一個(gè)類(lèi)讲冠,用來(lái)剝離請(qǐng)求后的需要的數(shù)據(jù)部分(也可以不需要)
現(xiàn)在就開(kāi)始具體的代碼實(shí)現(xiàn)


一:統(tǒng)一的實(shí)體類(lèi)

實(shí)體類(lèi).png

其中,data就是我們真正需要的數(shù)據(jù)部分


二:網(wǎng)絡(luò)請(qǐng)求地址類(lèi)

網(wǎng)絡(luò)請(qǐng)求地址類(lèi).png

可以看到适瓦,我們有一個(gè)統(tǒng)一的接口竿开,還有一個(gè)登錄的接口地址


三:網(wǎng)絡(luò)請(qǐng)求類(lèi)


我們通過(guò)okHttpClient.builder構(gòu)建出一個(gè)httpClientBuilder,并且設(shè)置了超時(shí)時(shí)間谱仪,使用的是單利模式,并且返回通過(guò)retrofit.create(service)返回一個(gè)泛型類(lèi)否彩,為rxjava做準(zhǔn)備


四:網(wǎng)絡(luò)請(qǐng)求的操作

我們?cè)谡?qǐng)求網(wǎng)絡(luò)時(shí)疯攒,在請(qǐng)求前,請(qǐng)求后都有對(duì)應(yīng)的操作列荔,在發(fā)起請(qǐng)求的前敬尺,首先我們需要檢查是否有網(wǎng)絡(luò),沒(méi)有就告訴用戶(hù)贴浙,并且不發(fā)起請(qǐng)求砂吞,否則,就顯示一個(gè)對(duì)話(huà)框告訴用戶(hù)正在進(jìn)行加載數(shù)據(jù)崎溃,請(qǐng)求完成后蜻直,對(duì)話(huà)框消失,如果成功袁串,則把數(shù)據(jù)回調(diào)概而,否則彈出失敗的原因

(由于代碼比較長(zhǎng),所以采用分段截圖囱修,望大家不要介意)
我們使用一個(gè)抽象類(lèi)赎瑰,繼承了Subscriber<T>,并且定義的成功和失敗的回調(diào)方法破镰,可以看到餐曼,當(dāng)成功后,我們將數(shù)據(jù)返回啤咽,失敗了晋辆,則告訴用戶(hù)


五:統(tǒng)一的數(shù)據(jù)剝離


當(dāng)flag==1的時(shí)候,說(shuō)明請(qǐng)求數(shù)據(jù)了宇整,我們則需要把數(shù)據(jù)的data部分抽取出來(lái)瓶佳,否則,我們就彈出錯(cuò)誤的信息鳞青,為什么說(shuō)這個(gè)可以要也可以不要霸饲,因?yàn)橛行r(shí)候,我們可能并不需要data部分臂拓,也有可能flag有其他的值厚脉,需要做不同的處理,所以這個(gè)還得看需求胶惰,如果我們不需要的時(shí)候傻工,我們可以指定請(qǐng)求的線程在io線程,然后回調(diào)給主線程就可以了



到這里,基本的封裝就完成了中捆,現(xiàn)在我們來(lái)看看怎么用


首先我們需要定義一個(gè)接口:


這里的post代表的是post請(qǐng)求鸯匹,@FormUrlEncoded是表單形式,post里面的是請(qǐng)求的地址泄伪,我這里只是示例殴蓬,在開(kāi)發(fā)中需要換成你自己的請(qǐng)求地址,然后就是一系列的請(qǐng)求參數(shù)蟋滴,具體入?yún)⒕鸵约喝Q了

我們需要定義一個(gè)LoginApi染厅,去發(fā)起網(wǎng)絡(luò)請(qǐng)求,


通過(guò)剛剛的HttpApi中的getService返回對(duì)應(yīng)的接口津函,并且調(diào)用doLogin方法肖粮,就可以了,這里注意一下球散,我現(xiàn)在使用的是不需要成功后就立刻轉(zhuǎn)成實(shí)體類(lèi)尿赚,僅僅只是將請(qǐng)求時(shí)放在io線程去處理,通過(guò).compose這個(gè)操作符去實(shí)現(xiàn)蕉堰,并且回調(diào)給RxSubscibe凌净,我們來(lái)看看成功后立刻轉(zhuǎn)成實(shí)體類(lèi)是怎樣,


可以看出來(lái)差別只是少了BaseEntity屋讶,這樣的話(huà)冰寻,就沒(méi)有辦法拿到BaseEntity.getFlag()的方法,具體情況看需求

然后皿渗,我們?cè)贛ainActivity中調(diào)用
首先我們需要new出Api斩芭,然后調(diào)用api的doLogin方法


這種是不需要立刻轉(zhuǎn)成實(shí)體類(lèi),否則是這樣的


好了乐疆,整個(gè)RxJava+Retrofit的二次封裝就完成了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末划乖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挤土,更是在濱河造成了極大的恐慌琴庵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仰美,死亡現(xiàn)場(chǎng)離奇詭異迷殿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)咖杂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)庆寺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诉字,你說(shuō)我怎么就攤上這事懦尝≈祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵导披,是天一觀的道長(zhǎng)屈扎。 經(jīng)常有香客問(wèn)我埃唯,道長(zhǎng)撩匕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任墨叛,我火速辦了婚禮止毕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漠趁。我一直安慰自己扁凛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布闯传。 她就那樣靜靜地躺著谨朝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甥绿。 梳的紋絲不亂的頭發(fā)上字币,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音共缕,去河邊找鬼洗出。 笑死,一個(gè)胖子當(dāng)著我的面吹牛图谷,可吹牛的內(nèi)容都是我干的翩活。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼便贵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菠镇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起承璃,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤利耍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绸硕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體堂竟,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年玻佩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了出嘹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咬崔,死狀恐怖税稼,靈堂內(nèi)的尸體忽然破棺而出烦秩,到底是詐尸還是另有隱情,我是刑警寧澤郎仆,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布只祠,位于F島的核電站,受9級(jí)特大地震影響扰肌,放射性物質(zhì)發(fā)生泄漏抛寝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一曙旭、第九天 我趴在偏房一處隱蔽的房頂上張望盗舰。 院中可真熱鬧,春花似錦桂躏、人聲如沸钻趋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛮位。三九已至,卻和暖如春鳞绕,著一層夾襖步出監(jiān)牢的瞬間失仁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工猾昆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陶因,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓垂蜗,卻偏偏與公主長(zhǎng)得像楷扬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贴见,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,761評(píng)論 25 707
  • AFHTTPRequestOperationManager 網(wǎng)絡(luò)傳輸協(xié)議UDP烘苹、TCP、Http片部、Socket镣衡、X...
    Carden閱讀 4,326評(píng)論 0 12
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法档悠,內(nèi)部類(lèi)的語(yǔ)法廊鸥,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法辖所,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,598評(píng)論 18 399
  • 少年時(shí)讀了不少閑書(shū)惰说,其中最好奇的是《一千零一夜》里面各種哈里發(fā)的故事。馬拉喀什老城應(yīng)該非常適合拍一千零一夜的電影缘回。...
    hikingtony閱讀 361評(píng)論 0 0
  • 剛過(guò)完九九重陽(yáng)節(jié)吆视,天氣也是變化了好多典挑,完全是告別了夏天的炎熱,更多的是驟冷的秋風(fēng)和纏綿的秋雨啦吧,大西北的天氣您觉,更是變...
    素沙閱讀 184評(píng)論 0 0