平时在开发中请求业务时一般返回数据的格式是固定的,在使用Java时我们一般会新建一个抽象类去继承RxJava的观察者,然后把相同的逻辑写在封装类中。但是网络请求一般有成功和失败两个回调,我们可能只需要用到一个回调方法,这时候我们可以用kotlin的方法参数和参数默认值封装,即使只传一个方法或者不传都不会有问题
fun <T> Observable<BaseBean<T>>.subscribeData(success: ((T?) -> Unit)? = null, fail: ((error: String?) -> Unit)? = null): Disposable =
subscribe({
if (200 == it.code) {
success?.invoke(it.data)
} else {
fail?.invoke(it.msg)
}
}, {
fail?.invoke(it.toString())
})
fun <T> Observable<T>.subscribeOriginal(success: ((T) -> Unit)? = null, fail: ((error: String?) -> Unit)? = null): Disposable =
subscribe({
success?.invoke(it)
}, {
fail?.invoke(it.toString())
})


这里需要注意一下空安全问题,在BaseBean里面,data的类型和结果未知,有可能为null,所以在使用泛型时要定义为可空类型,而在获取原始结果时android studio之所以没有显示?是因为BaseBean里面已经把data定义为可空类型。
网友评论