亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

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

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

一. 前言

之前的文章 RxJava處理業務異常的幾種方式 曾經介紹過 Retrofit 的異??梢杂卸喾N處理方式。

其中,可以使用 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄色一区二区在线| 久久天天躁狠狠躁夜夜躁2014| 日韩免费观看网站| 国产综合色香蕉精品| 国产精品成熟老女人| 国产男人精品视频| 在线观看欧美成人| 国产国语videosex另类| 欧美性做爰毛片| 亚洲影院色在线观看免费| 成人在线播放av| 日本精品一区二区三区在线| 精品视频久久久久久久| 国产成人精品av在线| 久久免费视频在线观看| 韩国精品久久久999| 亚洲成人1234| 国产精品国产三级国产aⅴ浪潮| 国产欧美精品一区二区三区-老狼| 91久久精品国产91久久| 草民午夜欧美限制a级福利片| 国产91精品黑色丝袜高跟鞋| 2019中文字幕在线免费观看| 欧美日韩在线看| 欧美日韩成人在线视频| 欧美一区二区三区四区在线| 日韩亚洲精品电影| 久久国产精品偷| 国产精品久久久久久久午夜| 欧美亚洲在线播放| 欧美成人精品在线观看| 成人国产精品日本在线| 欧美日韩精品国产| 日韩在线一区二区三区免费视频| 国产成一区二区| 国产美女主播一区| 国产精品久久婷婷六月丁香| 国产精品网站大全| 2019日本中文字幕| 国产精自产拍久久久久久蜜| 91精品国产高清久久久久久久久| 亚洲视频在线观看视频| 中国人与牲禽动交精品| 亚洲第一视频网| 中文在线资源观看视频网站免费不卡| 91精品视频在线播放| 欧美激情手机在线视频| 久久色免费在线视频| 日韩精品极品在线观看播放免费视频| 欧美激情精品久久久久| 亚洲国产欧美日韩精品| 国产盗摄xxxx视频xxx69| 久久九九有精品国产23| 国产精品女主播视频| 在线观看久久av| 国产成人综合精品在线| 国产一区红桃视频| 亚洲最大福利网| 欧美一区二区大胆人体摄影专业网站| 亚洲视频在线播放| 亚洲欧美一区二区激情| 欧美激情第1页| 久久天天躁夜夜躁狠狠躁2022| 国产精品免费小视频| 久久国产精品首页| 国产在线日韩在线| 久久亚洲综合国产精品99麻豆精品福利| 国产视频久久久久久久| 欧美另类极品videosbest最新版本| 欧美日韩国产专区| 国产乱人伦真实精品视频| 亚洲电影在线看| 久久久久久久久电影| 欧美激情小视频| 精品亚洲永久免费精品| 欧美激情2020午夜免费观看| 国产一区二区三区欧美| 在线日韩中文字幕| 久久久电影免费观看完整版| www.午夜精品| 69国产精品成人在线播放| 国内伊人久久久久久网站视频| 亚洲高清av在线| 国产日韩av高清| 91精品久久久久久| 亚洲高清一二三区| 欧美高清无遮挡| 成人免费观看网址| 一本色道久久88综合亚洲精品ⅰ| 亚洲加勒比久久88色综合| 日韩大片免费观看视频播放| 秋霞成人午夜鲁丝一区二区三区| 欧美精品激情在线| 亚洲女人天堂成人av在线| 91久久精品国产91性色| 成人国产精品一区| 色综合伊人色综合网站| 欧美日韩国产丝袜美女| 日韩小视频在线| 欧美成人精品在线播放| 色偷偷av一区二区三区| 欧美一乱一性一交一视频| 日韩国产精品视频| 日韩欧美精品中文字幕| 亚洲国产日韩精品在线| 国产精品中文字幕在线| 日韩高清不卡av| 亚洲自拍偷拍福利| 国产做受高潮69| 91久久综合亚洲鲁鲁五月天| 欧美性xxxx极品hd欧美风情| 国产人妖伪娘一区91| 在线电影欧美日韩一区二区私密| 日韩欧美高清在线视频| 欧美精品电影免费在线观看| 奇米影视亚洲狠狠色| 国产成人精品日本亚洲| 亚洲人成网站999久久久综合| 久久国产精品电影| 日韩精品中文字幕久久臀| 欧美午夜女人视频在线| 欧美国产精品人人做人人爱| 97在线日本国产| 欧美在线精品免播放器视频| 亚洲国产成人精品久久久国产成人一区| 日韩精品久久久久久久玫瑰园| 欧美精品videosex性欧美| 欧美大片在线看| 成人精品福利视频| 成人精品视频在线| 欧美激情精品久久久久久| 欧美日韩免费看| 在线日韩av观看| 亚洲成年人在线播放| 亚洲欧美国产日韩中文字幕| 亚洲欧美制服丝袜| 欧美丰满片xxx777| 97国产在线观看| 日本一区二区在线播放| 91九色精品视频| 欧美激情视频在线观看| 日韩中文字幕久久| 欧美性猛交xxx| 欧美视频中文在线看| 黑人极品videos精品欧美裸| 亚洲成年网站在线观看| 亚洲欧美日韩精品久久亚洲区| 九九热r在线视频精品| 日韩精品极品毛片系列视频| 91国产美女在线观看| 日韩av在线免费观看一区| 欧美在线性爱视频| 国产成人在线亚洲欧美| 日韩免费高清在线观看| 日韩精品免费一线在线观看| 亚洲成年人影院在线| 欧美自拍大量在线观看| 精品一区二区三区三区| 狠狠色狠狠色综合日日小说| 亚洲成色777777在线观看影院| 在线观看不卡av| 国产丝袜精品视频| 亚洲在线观看视频网站| 97免费中文视频在线观看|