用于改造服务的 RxJava2 错误处理包装器
RxJava2 Error Handling Wrapper For Retrofit Service
我需要在我的网络服务应用程序中全局处理错误,我在改造服务中使用 Rxjava2CallAdapterFactory。因此,为了在全球范围内处理错误,我搜索了各个站点并找到了解决方案。但我知道这是怎么回事。
class RxErrorAdapter private constructor() : CallAdapter.Factory() {
private val original = RxJava2CallAdapterFactory.create()
override fun get(returnType: Type, annotations: Array<Annotation>, retrofit: Retrofit): CallAdapter<*, *>? {
return Wrapper<Any>(original.get(returnType, annotations, retrofit)
?: return null)
}
private class Wrapper<R>(private val wrapped: CallAdapter<R, *>) : CallAdapter<R, Any> {
override fun responseType(): Type {
return wrapped.responseType()
}
override fun adapt(call: Call<R>): Any {
val result = wrapped.adapt(call)
}
}
companion object {
fun create(): CallAdapter.Factory {
return RxErrorAdapter()
}
}
}
谁能解释一下?
因为 RxJava2CallAdapter
已经知道如何 适应 一个 return 类型 Call<T>
到 Observable<T>
, Completable
和其他 Rx 类型,
RxErrorCallAdapterFactory
请原厂RxJava2CallAdapterFactory
打造这样的"original"RxJava2CallAdapter
。然后 RxErrorCallAdapterFactory
创建自己的 CallAdapter
- RxCallAdapterWrapper
,其中包含原始适配器。
所以RxErrorCallAdapterFactory
给出RxCallAdapterWrapper
先委托给原来的RxJava2CallAdapter
将Call<User>
转换为Observable<User>
,然后应用onErrorResumeNext()
运算符位于 Observable<User>
.
之上
当网络请求期间发生错误时(例如,来自服务器的 400 错误请求),它将传播到 onErrorResumeNext()
,您可以在其中应用您的 error-mapping 逻辑。在这种情况下 onErrorResumeNext()
需要 Throwable
和 returns Observable
信号 onError()
映射 Throwable
.
基本上,如果原始 CallApater
returns Observable.just(User())
,包装器 CallAdapter
将 return 这个:
Observable.just(User())
.onErrorResumeNext { throwable ->
Observable.error(map(throwable))
}
我需要在我的网络服务应用程序中全局处理错误,我在改造服务中使用 Rxjava2CallAdapterFactory。因此,为了在全球范围内处理错误,我搜索了各个站点并找到了解决方案。但我知道这是怎么回事。
class RxErrorAdapter private constructor() : CallAdapter.Factory() {
private val original = RxJava2CallAdapterFactory.create()
override fun get(returnType: Type, annotations: Array<Annotation>, retrofit: Retrofit): CallAdapter<*, *>? {
return Wrapper<Any>(original.get(returnType, annotations, retrofit)
?: return null)
}
private class Wrapper<R>(private val wrapped: CallAdapter<R, *>) : CallAdapter<R, Any> {
override fun responseType(): Type {
return wrapped.responseType()
}
override fun adapt(call: Call<R>): Any {
val result = wrapped.adapt(call)
}
}
companion object {
fun create(): CallAdapter.Factory {
return RxErrorAdapter()
}
}
}
谁能解释一下?
因为 RxJava2CallAdapter
已经知道如何 适应 一个 return 类型 Call<T>
到 Observable<T>
, Completable
和其他 Rx 类型,
RxErrorCallAdapterFactory
请原厂RxJava2CallAdapterFactory
打造这样的"original"RxJava2CallAdapter
。然后 RxErrorCallAdapterFactory
创建自己的 CallAdapter
- RxCallAdapterWrapper
,其中包含原始适配器。
所以RxErrorCallAdapterFactory
给出RxCallAdapterWrapper
先委托给原来的RxJava2CallAdapter
将Call<User>
转换为Observable<User>
,然后应用onErrorResumeNext()
运算符位于 Observable<User>
.
当网络请求期间发生错误时(例如,来自服务器的 400 错误请求),它将传播到 onErrorResumeNext()
,您可以在其中应用您的 error-mapping 逻辑。在这种情况下 onErrorResumeNext()
需要 Throwable
和 returns Observable
信号 onError()
映射 Throwable
.
基本上,如果原始 CallApater
returns Observable.just(User())
,包装器 CallAdapter
将 return 这个:
Observable.just(User())
.onErrorResumeNext { throwable ->
Observable.error(map(throwable))
}