利用 Kotlin 扩展函数优雅处理网络异常详解
一、前言
在 Android 开发中,网络请求是核心业务场景之一。使用 RxJava 配合 Retrofit 进行异步网络调用时,异常处理往往分散在各个订阅(Observer)或观察者(Subscriber)的 onError 回调中。这种处理方式容易导致代码重复,且难以统一处理不同层级的错误逻辑。
传统的 RxJava 提供了如 onErrorReturn 和 onErrorResumeNext 等操作符来处理异常:
- onErrorReturn:当发生错误时,发射一个默认值然后结束数据流。订阅者看不到异常信息,只看到正常的数据流结束状态。
- onErrorResumeNext:当错误发生时,使用另外一个数据流继续发射数据。返回的被观察者中看不到错误信息。
虽然这些操作符功能强大,但直接在每个 Observable 链式调用中编写显得冗长。结合 Kotlin 的特性,我们可以定义扩展函数来封装这些逻辑,使代码更加简洁优雅。
二、网络响应模型设计
网络请求返回的 Response 通常采用如下 JSON 格式:
{
"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
) : Serializable
// UnProguard 是一个空的接口,主要是方便 App 在混淆的时候保留部分类
interface UnProguard : Serializable
其中,isOkStatus 属性用于快速判断请求是否成功:


