Rxjava2+Retrofit的完美封裝

要說2016年最火的Android技術是什么,毫無疑問肯定是RxJava+Retrofit+Mvp?,F(xiàn)如今2017年也已經(jīng)只剩下最后一個月了。相信做android開發(fā)的小伙伴對RxJava和Retrofit也不再陌生。即使沒有刻意的去學習過,也應該對RxJava和Retrofit有個一知半解。去年的時候學習了Rxjava和Retrofit的基本用法,但一直沒有在實際項目中運用。今年開做新項目,果斷在新項目中引入了RxJava和Retrofit。本篇文章將介紹筆者在項目中對Retrofit的封裝。

先來看一下封裝過后的Retrofit如何使用。


沒錯,就是這么簡潔的一個鏈式調(diào)用,可以顯示加載動畫,還加入了Retrofit生命周期的管理。

開始之前需要先在module項目里的Gradle文件中添加用到的依賴庫


為了方便依賴庫版本的修改我們采用”io.reactivex.rxjava2:rxjava:$rootProject.ext.rxjava2Version”這中方式添加依賴,因此需要在project的build.gradle文件的加上以下內(nèi)容:

構建初始化Retrofit的工具類IdeaApi

在該類中主要完成三個功能,即:

設置日志攔截器攔截服務器返回的json數(shù)據(jù)。Retrofit將請求到json數(shù)據(jù)直接轉換成了實體類,但有時候我們需要查看json數(shù)據(jù),Retrofit并沒有提供直接獲取json數(shù)據(jù)的功能。因此我們需要自定義一個日志攔截器攔截json數(shù)據(jù),并輸入到控制臺。

設置 Http 攔截器,處理緩存問題。通過攔截器攔截Http請求頭,為請求頭配置緩存信息,包括控制緩存的最大生命值,控制緩存的過期時間。

獲取Retrofit實例。通過單利模式獲取Retrofit實例。

實現(xiàn)代碼如下:


服務器響應數(shù)據(jù)的基類BasicResponse

構建服務器響應數(shù)據(jù)的基類 BasicResponse。假定服務器返回的Json數(shù)據(jù)格式如下:


根據(jù)Json數(shù)據(jù)格式構建我們的 BasicResponse(BasicResponse中的字段內(nèi)容需要根據(jù)自己服務器返回的數(shù)據(jù)確定)。代碼如下:

封裝DefaultObserver處理服務器響應

構建DefaultObserver處理服務器響應數(shù)據(jù)。定義DefaultObserver類繼承Observer,并重寫相應的方法。

在請求數(shù)據(jù)過程中免不了會出現(xiàn)各種錯誤或者異常,可以分為兩種情況:

像登錄時密碼錯誤、請求參數(shù)錯誤的情況,即服務器返回了錯誤的數(shù)據(jù),我們可以稱之為錯誤。只要服務器返回數(shù)據(jù),Observer中的onNext()方法就會被執(zhí)行。但有時服務器返回錯誤數(shù)據(jù)并不是我們想要的,因此我們需要對錯誤數(shù)據(jù)進行處理。我們可以和服務端事先約定正常情況的請求碼,如上面Json中的code等于200時視為數(shù)據(jù)正常,code不為200時視為數(shù)據(jù)錯誤。因此我們可以定義出一個請求數(shù)據(jù)正常的抽象方法onSuccess(),在code為200時調(diào)用,并在請求數(shù)據(jù)的頁面重寫該方法。另外定義一個請求失敗的方法onFail(),在code不為200時調(diào)用,并Toast出錯誤原因。請求網(wǎng)絡頁面不必重寫該方法。代碼如下:


請求網(wǎng)絡時出現(xiàn)異常情況,如網(wǎng)絡連接失敗、網(wǎng)絡連接超時、數(shù)據(jù)解析異常等情況。我們可以稱之為異常,即這種情況下Observer的onError()方法被調(diào)用。因此我們可以定義一個onException()的方法,并根據(jù)不同的異常在onException()方法中給出對應的Toast提示。代碼如下:


處理加載動畫ProgressDialog

我們可以自定義ProgressBar,然后封裝成DialogUtils進行控制ProgressDialog。

DialogUtils代碼如下:


加入ProgressBar后完整的DefaultObserver,由于代碼太長,有興趣的同學可以點擊左下方的閱讀原文進行查看。

Rxjava生命周期處理

在 Activity 或者 Fragment 中使用 RxJava 時我們有必要對 RxJava 的生命周期進行管理,否則可能引起內(nèi)存泄漏問題。在這里我們使用?RxLifecycle?來對 RxJava 進行生命周期管理。

在gradel中添加依賴如下:

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,781評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 又是一年中秋佳節(jié),祝各位中秋節(jié)快樂。 今天我們來聊聊這個最近很火的網(wǎng)絡請求庫retrofit,在此基礎上會延伸出一...
    涅槃1992閱讀 7,939評論 13 133
  • 下次花開時, 已不相識。 歲月易流逝, 回首便是往昔。 記憶被擱淺, 往事也終會消散。 人生在世, 終有悲歡離合,...
    沐忻閱讀 151評論 0 0
  • 關于初戀曾幾何時看過許多文章,當時毫無感覺?,F(xiàn)在經(jīng)歷過一些后覺得許多事真的只有自己經(jīng)歷以后才可以深刻體會到。 以前...
    為了紀念的忘卻閱讀 161評論 0 0

友情鏈接更多精彩內(nèi)容