Retrofit+OkHttp+RxJava數(shù)據(jù)解析問題

Retrofit+OkHttp+RxJava

Retrofit 負(fù)責(zé) 請求的數(shù)據(jù)和請求的結(jié)果锋勺,使用接口的方式呈現(xiàn)乍丈,OkHttp負(fù)責(zé)請求的過程衙解,RxJava 負(fù)責(zé)異步豁辉,各種線程之間的切換令野。

在定義接口的時(shí)候可以直接返回你想要的數(shù)據(jù)格式Bean

Retrofit會(huì)在返回結(jié)果的時(shí)候直接將這個(gè)格式Bean返還給你

一般情況下后臺(tái)開發(fā),在同一個(gè)接口返回?cái)?shù)據(jù)的格式的話是統(tǒng)一的:

打個(gè)比方:

登錄成功接口返回?cái)?shù)據(jù)

{

? ? "status": 0,

? ? "msg": "登錄成功徽级!",

? ? "data": "12345678"

}

登錄失敗接口返回?cái)?shù)據(jù)

{

? ? "status": 999,

? ? "msg": "登錄失斊啤!",

? ? "data": ""

}

如果是這樣是不會(huì)出現(xiàn)錯(cuò)誤的餐抢。

但是我們后臺(tái)在失敗時(shí)候返回的數(shù)據(jù)格式變了现使。例如:

{

? ? "status": 999,

? ? "msg": "登錄失數统住!",

? ? "data": []

}

data本來是一個(gè)String類型突然變成了一個(gè)數(shù)組類型,這時(shí)候就會(huì)出現(xiàn)錯(cuò)誤

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_STRING but was BEGIN_ARRAY at line 1 column 98 path $.data

這時(shí)候我該怎么辦碳锈,我肯定不能挨個(gè)接口去判斷顽冶,所以我準(zhǔn)備從基礎(chǔ)下手。

首先我確定了我們的接口status和msg這兩個(gè)肯定是不會(huì)改變的售碳,這兩個(gè)參數(shù)對(duì)于所有接口都是通用的參數(shù)渗稍。

建立Bean

其次解析數(shù)據(jù)格式的為retrofit的


方法。

通過這句代碼去設(shè)置一個(gè)解析工廠团滥。

so我需要做的就是去重寫GsonConverterFactory 在解析返回?cái)?shù)據(jù)的時(shí)候去加個(gè)判斷

首先定義CustomGsonConverterFactory去繼承 Converter.Factory


其次新建CustomGsonResponseBodyConverter實(shí)現(xiàn)implements Converter?

responseBodyConverter這個(gè)方法是處理ResponseBody的

在convert里面可以拿到ResponseBody

之后ResponseBody解析為公共的AllBean

AllBean判斷status是否等于0

如果是的話正常解析就好了

如果不是0的話再將AllBean轉(zhuǎn)成String賦值給response之后去解析

因?yàn)锳llBean里面的參數(shù)是公共的,所以就不會(huì)出現(xiàn)解析的異常了

至此問題解決报强。


自定義可以根據(jù)需求在里面寫的更詳細(xì)灸姊,我只是記錄一下,如果再遇到此類問題秉溉,我應(yīng)該想到的解決方案應(yīng)該是什么樣子力惯,在哪里下手。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末召嘶,一起剝皮案震驚了整個(gè)濱河市父晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弄跌,老刑警劉巖甲喝,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铛只,居然都是意外死亡埠胖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門淳玩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來直撤,“玉大人,你說我怎么就攤上這事蜕着∧笔” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵承匣,是天一觀的道長蓖乘。 經(jī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
  • 文/蒼蘭香墨 我猛地睜開眼浪规,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了探孝?” 一聲冷哼從身側(cè)響起笋婿,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顿颅,沒想到半個(gè)月后缸濒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡元镀,尸身上長有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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奠衔,卻和暖如春谆刨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背归斤。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工痊夭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脏里。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓生兆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親膝宁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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