Android 用户的Rxjava改型解析api错误
我在一个图书馆项目中使用RxJava进行改造。一切正常,当我请求数据时,我得到了预期的结果Android 用户的Rxjava改型解析api错误,android,kotlin,retrofit,rx-java,Android,Kotlin,Retrofit,Rx Java,我在一个图书馆项目中使用RxJava进行改造。一切正常,当我请求数据时,我得到了预期的结果 @GET(Routes.ME) fun getUserObservable(): Observable<User> 一切正常,但如果发生API错误,则API会发送给我们,例如: {reason: "the reason of the error", details: "some details", type:"the type error"} 我想要的是将这个错误显式地提供给前端,前端会得
@GET(Routes.ME)
fun getUserObservable(): Observable<User>
一切正常,但如果发生API错误,则API会发送给我们,例如:
{reason: "the reason of the error", details: "some details", type:"the type error"}
我想要的是将这个错误显式地提供给前端,前端会得到这个错误,因为直到现在,当我从可观察到的错误中得到错误时,前端无法解析我想要构建的这个错误。因此,我的目的是从我的库中解析这个错误,用提供的API json构建一个错误POJO,并在前端收到错误时发送它。如果错误不是来自API,则前端应获得正常错误。您将需要改装的实例来将异常映射到错误响应。以下是一个例子:
class Error(
var reason: String = "",
var details: String = "",
var type: String = ""
)
api.getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ user ->
println("Get user success : $user")
}, { throwable ->
if (throwable is HttpException) {
val converter: Converter<ResponseBody, Error> = retrofit.responseBodyConverter(Error::class.java, emptyArray())
val error = converter.convert(throwable.response().errorBody())
println("Get user error : ${error.reason}")
} else {
println("Get user error : $throwable")
}
})
类错误(
变量原因:String=“”,
var详细信息:String=“”,
变量类型:String=“”
)
api.getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({user->
println(“获取用户成功:$user”)
},{可丢弃->
if(throwable是HttpException){
val converter:converter=reformation.responseBodyConverter(错误::class.java,emptyArray())
val error=converter.convert(throwable.response().errorBody())
println(“获取用户错误:${error.reason}”)
}否则{
println(“获取用户错误:$throwable”)
}
})
您将需要改装的实例来将异常映射到错误响应。以下是一个例子:
class Error(
var reason: String = "",
var details: String = "",
var type: String = ""
)
api.getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ user ->
println("Get user success : $user")
}, { throwable ->
if (throwable is HttpException) {
val converter: Converter<ResponseBody, Error> = retrofit.responseBodyConverter(Error::class.java, emptyArray())
val error = converter.convert(throwable.response().errorBody())
println("Get user error : ${error.reason}")
} else {
println("Get user error : $throwable")
}
})
类错误(
变量原因:String=“”,
var详细信息:String=“”,
变量类型:String=“”
)
api.getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({user->
println(“获取用户成功:$user”)
},{可丢弃->
if(throwable是HttpException){
val converter:converter=reformation.responseBodyConverter(错误::class.java,emptyArray())
val error=converter.convert(throwable.response().errorBody())
println(“获取用户错误:${error.reason}”)
}否则{
println(“获取用户错误:$throwable”)
}
})
为什么不使用rxKotlin的subscribeBy?你是对的,我可以,这将是下一步,但需要首先解决我的问题为什么不使用rxKotlin的subscribeBy?你是对的,我可以,这将是下一步,但需要首先解决我的问题,而不是在每次api调用中处理这个问题,我非常希望看到一个可以通过ConverterFactory或OkHttp拦截器实现这一点的实现。通过创建扩展Throwable的错误类。你知道怎么做吗?与其在每次api调用中都处理这个问题,我真的很想看到一个通过ConverterFactory或OkHttp拦截器实现的实现。通过创建扩展Throwable的错误类。你知道怎么做吗?
class Error(
var reason: String = "",
var details: String = "",
var type: String = ""
)
api.getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ user ->
println("Get user success : $user")
}, { throwable ->
if (throwable is HttpException) {
val converter: Converter<ResponseBody, Error> = retrofit.responseBodyConverter(Error::class.java, emptyArray())
val error = converter.convert(throwable.response().errorBody())
println("Get user error : ${error.reason}")
} else {
println("Get user error : $throwable")
}
})