Map Retrofit RxJava Result into sealed class 成功与失败
Map Retrofit RxJava Result into sealed class Success and failure
我正在使用 RXJava 进行改造来调用我的 API,我正在尝试将我的调用结果映射到密封的 class 成功和失败部分,
我做了映射部分,但我总是收到此错误 java.lang.RuntimeException:无法调用没有参数的私有 Result()
这是我的代码:
改造界面
@POST("$/Test")
fun UpdateProfile(@Body testBody: TestBody): Single<Result<TestResult>>
结果密封Class
sealed class Result<T> {
data class Success<T>(val value: T) : Result<T>()
data class Failure<T>(val throwable: Throwable) : Result<T>()}
调用和映射
webServices.UpdateProfile(testBody)
.onErrorReturn {
Failure(it)
}
.map {
when (it) {
is Result.Failure -> Failure(it.throwable)
is Success -> Success(it.value)
}
}.subscribe()
有人可以帮忙吗?为什么我会收到此错误消息?
问题是你的改装界面 return 类型:Single<Result<TestResult>>
。 Retrofit 无法知道您的 Result
是多态类型,它只会尝试实例化您指定的任何 class。在这种情况下Result
不能直接实例化,因为它是密封的。
您需要使用非多态 return 类型,或者相应地 configure retrofit。
我正在使用 RXJava 进行改造来调用我的 API,我正在尝试将我的调用结果映射到密封的 class 成功和失败部分,
我做了映射部分,但我总是收到此错误 java.lang.RuntimeException:无法调用没有参数的私有 Result()
这是我的代码:
改造界面
@POST("$/Test")
fun UpdateProfile(@Body testBody: TestBody): Single<Result<TestResult>>
结果密封Class
sealed class Result<T> {
data class Success<T>(val value: T) : Result<T>()
data class Failure<T>(val throwable: Throwable) : Result<T>()}
调用和映射
webServices.UpdateProfile(testBody)
.onErrorReturn {
Failure(it)
}
.map {
when (it) {
is Result.Failure -> Failure(it.throwable)
is Success -> Success(it.value)
}
}.subscribe()
有人可以帮忙吗?为什么我会收到此错误消息?
问题是你的改装界面 return 类型:Single<Result<TestResult>>
。 Retrofit 无法知道您的 Result
是多态类型,它只会尝试实例化您指定的任何 class。在这种情况下Result
不能直接实例化,因为它是密封的。
您需要使用非多态 return 类型,或者相应地 configure retrofit。