基于RxJava2+Retrofit+OkHttp3搭建網(wǎng)絡(luò)框架(包括添加公共參數(shù)胳泉,統(tǒng)一錯誤處理,自動登錄岩遗,數(shù)據(jù)加解密)

1.相關(guān)庫的依賴

2.全局網(wǎng)絡(luò)管理

? ? 封裝思路大體都差不多扇商,單例模式構(gòu)建全局網(wǎng)絡(luò)管理者:

? ?在構(gòu)造方法中初始化OkHttpClient和Retrofit: ? ? ??

3.公共參數(shù)添加

? ?項目中經(jīng)常會要求接口添加一些公共的請求參數(shù),例如手機版本信息喘先,app版本钳吟,系統(tǒng)版本廷粒,時間戳等窘拯。 okhttp提供了強大的攔截器Interceptor,基于此實現(xiàn)公共參數(shù)的統(tǒng)一添加:

4.統(tǒng)一錯誤處理

一般后臺返回的json數(shù)據(jù)都有統(tǒng)一格式,例如:

根據(jù)實際情況去自定義坝茎,一般都會包含code,msg,data這三個字段涤姊。然后定義一個異常類:

這個類也很簡單,code對應的就是服務(wù)端返回的code嗤放,displayMsg對應兩種情況:一種是服務(wù)端返回的錯誤信息思喊,另一種則是網(wǎng)絡(luò)問題等外部錯誤信息。具體的錯誤處理邏輯我放在了Observer類中:


onNext()方法重的處理很簡單次酌,根據(jù)返回數(shù)據(jù)中的succsee字段判斷成功與否恨课,這里做了一個data的非空判斷,是為了處理有些成功但不返回data數(shù)據(jù)的情況岳服。失敗則直接調(diào)用了onError()方法剂公,將失敗的情況當作異常來處理:

根據(jù)異常類型來做處理,如果異常為之前定義的ApiException,則在此處可以根據(jù)定義好的code做具體處理吊宋,如登錄信息過期纲辽,被限制登錄等等。這里僅僅將錯誤信息取出來做展示璃搜。

5.token過期時自動登錄

? ? ? ? 有種需求是客戶端請求某個接口拖吼,發(fā)現(xiàn)登錄信息已經(jīng)過期,此時要幫客戶自動登錄且登錄成功后繼續(xù)請求之前的接口这吻,讓用戶察覺不到吊档,也就是自動登錄。具體做法是用戶初次登錄唾糯,服務(wù)端返回token和access_token,客戶端將其保存在本地怠硼,通過access_token來訪問服務(wù)端涡上。access_token的有效期比較短,一旦失效拒名,服務(wù)端會返回一個401錯誤吩愧,客戶端在收到這個錯誤后,拿token去訪問一個接口生成新的access_token,然后拿著有效的access_token訪問增显。OkHttp提供了authenticator()方法:

實現(xiàn)的authenticator:

注意要使用同步的方式獲取refresh_token雁佳。獲取成功后將新的token放在header中繼續(xù)訪問。

6.請求參數(shù)與響應數(shù)據(jù)的加解密

? ? ? ? 通常生產(chǎn)環(huán)境下接口請求參數(shù)和服務(wù)端返回的數(shù)據(jù)都是要經(jīng)過加密處理的同云,這里就需要借助retrofit的addConverterFactory()方法來實現(xiàn)糖权。首先需要自定義一個Converter.Factory類:

主要實現(xiàn)responseBodyConverter()和requestBodyConverter()兩個方法,返回兩個Converter對象炸站,在這兩個類里面可以實現(xiàn)加解密星澳。由于加密的實現(xiàn)各不相同,這里不給出具體實現(xiàn)旱易,只展示解密:

具體解密方法可以按需替換禁偎。

最后還有一個統(tǒng)一的線程調(diào)度實現(xiàn),避免每個請求都去做同樣的事情:


demo地址:https://github.com/huangxshuo/RetrofittedNetwork

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阀坏,一起剝皮案震驚了整個濱河市如暖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忌堂,老刑警劉巖盒至,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異士修,居然都是意外死亡枷遂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門棋嘲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酒唉,“玉大人,你說我怎么就攤上這事封字∏荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵阔籽,是天一觀的道長流妻。 經(jīng)常有香客問我,道長笆制,這世上最難降的妖魔是什么绅这? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮在辆,結(jié)果婚禮上证薇,老公的妹妹穿的比我還像新娘度苔。我一直安慰自己,他們只是感情好浑度,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布寇窑。 她就那樣靜靜地躺著,像睡著了一般箩张。 火紅的嫁衣襯著肌膚如雪甩骏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天先慷,我揣著相機與錄音饮笛,去河邊找鬼。 笑死论熙,一個胖子當著我的面吹牛福青,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脓诡,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼无午,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了誉券?” 一聲冷哼從身側(cè)響起指厌,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤刊愚,失蹤者是張志新(化名)和其女友劉穎踊跟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸥诽,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡商玫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了牡借。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拳昌。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钠龙,靈堂內(nèi)的尸體忽然破棺而出炬藤,到底是詐尸還是另有隱情,我是刑警寧澤碴里,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布沈矿,位于F島的核電站,受9級特大地震影響咬腋,放射性物質(zhì)發(fā)生泄漏羹膳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一根竿、第九天 我趴在偏房一處隱蔽的房頂上張望陵像。 院中可真熱鬧就珠,春花似錦、人聲如沸醒颖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泞歉。三九已至蹂季,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疏日,已是汗流浹背偿洁。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沟优,地道東北人涕滋。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像挠阁,于是被迫代替她去往敵國和親宾肺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353