Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 用户的Rxjava改型解析api错误_Android_Kotlin_Retrofit_Rx Java - Fatal编程技术网

Android 用户的Rxjava改型解析api错误

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"} 我想要的是将这个错误显式地提供给前端,前端会得

我在一个图书馆项目中使用RxJava进行改造。一切正常,当我请求数据时,我得到了预期的结果

@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")
            }
        })