国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發 > 綜合 > 正文

利用Kotlin的方式如何處理網絡異常詳解

2024-07-21 23:03:48
字體:
來源:轉載
供稿:網友

一. 前言

之前的文章 RxJava處理業務異常的幾種方式 曾經介紹過 Retrofit 的異常可以有多種處理方式。

其中,可以使用 RxJava 的錯誤處理操作符,它們是專門用來處理異常的。

隨便例舉兩個操作符:

onErrorReturn 操作符,表示當發生錯誤的時候,發射一個默認值然后結束數據流。所以 Subscriber 看不到異常信息,看到的是正常的數據流結束狀態。

onErrorResumeNext 操作符,表示當錯誤發生的時候,使用另外一個數據流繼續發射數據。在返回的被觀察者中是看不到錯誤信息的。

二. 使用 Kotlin 的特性

這次我結合 Kotlin 擴展函數的特性來嘗試處理異常。

網絡請求返回的 Response 大多是采用如下這種形式:

{ "code":0, "message":"success", "data":{ ... }}

對于客戶端開發而言,我們會封裝一個基類的HttpResponse。

data class HttpResponse<T>( var code: Int = -1, //0: 成功 1: xxx錯誤或過期 2: 業務邏輯錯誤 500:系統內部錯誤 998表示Token無效 var message: String? = null, var data: T? = null) : UnProguard { val isOkStatus: Boolean get() = code == 0}

其中,UnProguard是一個空的接口,主要是方便 App 在混淆的時候保留部分類。

interface UnProguard : Serializable

通常情況下,我們會在 Observer 的 onError 中按照如下的方式處理異常:

 viewModel.getHelps(this)  .subscribe({   if (it.isOkStatus) {   multi_status_view.showContent()   adapter.addData(it.data?.list)   } else {   multi_status_view.showError()   }  }, { multi_status_view.showError() })

如果我們利用 RxJava 的錯誤處理操作符,可以編寫如下的擴展函數:

import com.safframework.utils.RetryWithDelayimport io.reactivex.Maybe/** * * @FileName: *  cn.magicwindow.core.ext.`Maybe+Extension`.kt * @author: Tony Shen * @date: 2018-07-19 17:31 * @version V1.0 <描述當前版本功能> *//** * 嘗試重試 * ?默認有3次重試機會,每次的延遲時間是1000ms */fun <T> Maybe<T>.retryWithDelayMillis(maxRetries: Int=3, retryDelayMillis: Int=1000): Maybe<T> = this.retryWhen(RetryWithDelay(maxRetries,retryDelayMillis))/** * 遇到錯誤時,能夠提前捕獲異常,并發射一個默認的值。 * 后面無須再做異常處理 */fun <T> Maybe<T>.errorReturn(defValue:T): Maybe<T> = this.onErrorReturn { it -> it.printStackTrace() return@onErrorReturn defValue}fun <T> Maybe<T>.errorReturn(defValue:T,action: (Throwable) -> Unit): Maybe<T> = this.onErrorReturn { action.invoke(it) return@onErrorReturn defValue}/** * 遇到錯誤時,能夠提前捕獲異常,并返回一個新的Maybe * 后面無須再做異常處理 */fun <T> Maybe<T>.errorResumeNext(defValue:T):Maybe<T> = this.onErrorResumeNext(Maybe.just(defValue))fun <T> Maybe<T>.errorResumeNext():Maybe<T> = this.onErrorResumeNext(Maybe.empty())

擴展函數 errorReturn 的使用:

 viewModel.getHelps(this)  .errorReturn(HttpResponse()) {   multi_status_view.showError()  }  .subscribe{   if (it.isOkStatus) {   multi_status_view.showContent()   adapter.addData(it.data?.list)   } else {   multi_status_view.showError()   }  }

這樣無須在 onError 中處理異常,而且 errorReturn 還是一個高階函數。它的 action 參數傳遞的是一個函數,專門用于處理異常。每一個網絡請求的異常處理并不會都一樣,可以用該函數來傳遞不同的異常處理。

總結

合理利用 Kotlin 的擴展函數,可以編寫優雅的代碼。而使用高階函數,則可以達到的進一步的抽象。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产尤物一区二区三区| 欧美卡一卡二| 狠狠操天天操夜夜操| 99热免费观看| 国产欧美久久久久久久久| 国产秒拍福利视频露脸| 九九在线视频| 国产在线观看a视频| 免费99热在线观看| 麻豆国产在线视频| 自拍av在线| 国产丝袜视频在线播放| 国产一二区在线| 欧美性受xxxx免费视频| 欧美性xxxx交| 超碰在线观看免费| 黄色国产在线| 中文字幕在线看精品乱码| 国产视频中文字幕| 精品一区二区三区免费站| 精品麻豆一区二区三区| 亚洲免费国产| 丁香花视频在线观看| 国产精品一区二区三区高清在线| 福利视频网站导航| 中文字幕在线视频观看| 精品国产99久久久久久| a视频免费看| 玖玖在线视频| 国产丝袜护土调教在线视频| 精品国内一区二区三区免费视频 | 亚洲欧美精选| 好吊日视频在线观看| 国产精品视频流白浆免费视频| 在线国产1区| 国产日本在线| 天堂在线亚洲| jizz亚洲大全| 伊人222成人综合网| 国产中文在线视频| 亚洲欧美一区二区三区在线播放| 成人福利视频导航| 国产福利图片| 成人精品福利| 日本卡一卡2卡3卡4精品卡网站| 国产香蕉视频在线观看| 久热中文字幕精品视频在线| 亚洲天堂久久久| 国产精品久久久久久精| 国产女王在线**视频| 天天av天天爽| 老司机精品视频一区二区| 精品国产免费第一区二区| 国产另类图片| 高清欧美精品xxxxx在线看| а√天堂www在线а√天堂视频| 精品国产一区二区三区四区阿崩 | 欧美视频免费一区二区三区| 精品国产一区二区三区不卡在线| 国产一二区在线| 最近免费中文字幕在线第一页 | 国产娇喘精品一区二区三区图片| 狠狠干天天爱| 久久国产综合视频| 久久亚洲资源| 免费在线超碰| 国产麻豆一区二区三区精品| 国产一区电影| 在线中文字幕视频| 欧美日韩一区二区三区在线播放| 男人天堂网在线观看| 老司机精品视频一区二区| 久草在线视频网| 国产麻豆视频免费观看| 狠狠干五月天| 中文字幕在线永久在线视频| 国产高清av| av高清资源| 欧洲亚洲精品视频| 国产一级影片| 国产精品欧美韩国日本久久| 国产98在线| 欧美一级久久久久久久久大| 另类专区欧美| av福利在线观看| www.夜夜操.com| 自拍av在线| 日本在线观看| 国产h色视频在线观看| 免费看成年人视频在线观看| 国产精品9区| 丁香花在线电影| 在线视频福利| 国产三区视频在线观看| 麻豆电影传媒二区| 国产性一级片| 交视频在线观看国产| 国产三线在线| 免费黄网站在线观看| 精品视频二区三区| 中文字幕国产视频| 久久精品国产亚洲777| 在线亚洲不卡| 国产福利在线| 精品视频麻豆入口| av在线免费播放网站| 精品女厕厕露p撒尿| 在线视频1区2区| av人人综合网| h网址在线观看| 伊人网在线观看| av日韩在线免费| wwwww在线观看免费视频| 日本三级视频网站| 国产在线看片| 国产精品国产国产aⅴ| 中文av在线播放| 欧美日韩国产亚洲沙发| 国产免费自拍视频| 2019年中文字幕| 夜夜操天天干| 精品国产免费第一区二区| 2018中文字幕在线观看| 91涩漫在线观看c| 国产一级二级三级在线观看| 亚洲国产aⅴ精品| 在线观看中文字幕的网站| 999福利在线视频| 国产激情视频在线| 国产一级二级在线| 小说区乱图片区| 99爱在线观看| av在线free| jlzzjlzz欧美大全| а√最新版在线天堂| 国产美女福利在线观看| 亚洲欧美国产另类首页| 国产盗摄精品一区二区酒店| 日本中文字幕在线视频| 福利视频网站导航| 麻豆网站在线| 老师我好爽再深一点的视频| 免费中文字幕| 国产不卡精品一区二区三区| 精品176二区| 精品美女调教视频| av免费在线观看网站| 色吊丝av中文字幕| 国产一级粉嫩xxxx| 在线中文字幕av| jizz性欧美| 黄色一级视频网站| 中文字幕色视频| 一本大道香蕉8中文在线视频| av在线免费观看网| 四虎成人欧美精品在永久在线| 精品入口麻豆传煤| www.夜夜操| 国产免费视频| 国产精品第八页| 91欧洲在线视精品在亚洲| 天堂资源中文在线| 国产精品久久久精品a级小说| 在线中文av| 国产麻豆视频免费观看| 另类高清dbsm日本tvav| 夜夜操com| 国产嫩草在线视频| 国产porny蝌蚪视频| 欧美卡一卡二| av资源网站在线观看| 日本不卡1区2区3区| 欧美日韩在线精品成人综合网| 在线91av| 色悠久久久久综合网小说| 国产精品白浆视频免费观看| 亚洲久草视频| 久久五月精品| h网站免费在线观看| 国产国产人免费人成免费视频| 激情综合网五月激情| 高清欧美精品xxxxx在线看| 精品国产美女福利到在线不卡| 成年午夜在线| 成av人免费青青久| 91中文字幕| 中文字幕网在线| 九九热视频在线| 在线中文字幕观看| 国产精品视频一区二区免费不卡| 国产真实伦在线观看| av在线播放网| eeuss影影院www在线播放| 青青草视频在线观看| 国产www在线观看| 中文字幕在线播放网址| 久久久久久久久免费视频| 国产成人天天5g影院| 国产探花在线观看| 国产导航在线|