0

我想使用密封类处理 api 响应

sealed class Result<out T> {

    data class Success<out T>(val value: T) : Result<T>()
    data class Failure<out T>(val throwable: Throwable) : Result<T>()
}

我的 api 正常工作

@POST("/api/doctor_app/UpdateProfile")
fun UpdateProfile(@Body request: Doctor): Single<GenericResponse>

当我将我的 api 更新为

@POST("/api/doctor_app/UpdateProfile")
fun UpdateProfile(@Body request: Doctor): Single<Result<GenericResponse>>

无法调用没有参数的私有 com.utils.Result()

我怎样才能实现响应

configService.UpdateProfile(doctor)
            .subscribeOnIO()
            .map {
                when(it){
                    is Result.Success -> Result.Success(it.value)
                    is Result.Failure -> Result.Failure<GenericResponse>(it.throwable)
                }
            }

在哪里订阅OnIO

fun <T> Single<T>.subscribeOnIO(): Single<T> {
    return this.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
}
4

1 回答 1

0

你有没有尝试过这样的事情:

@POST("/api/doctor_app/UpdateProfile")
fun UpdateProfile(@Body request: Doctor): Single<Result.Success<GenericResponse>>

接着

configService.UpdateProfile(doctor)
        .onErrorReturn { Result.Failure(it) }
        .subscribeOnIO()
        .map {
            when(it){
                is Result.Success -> Result.Success(it.value)
                is Result.Failure -> Result.Failure<GenericResponse>(it.throwable)
            }
        }
于 2020-08-28T07:34:03.947 回答