0

我正在使用 RXJava 改造来调用我的 API,我正在尝试将我的调用结果映射到密封类成功和失败部分,

我做了映射部分,但我总是收到这个错误java.lang.RuntimeException: Failed to invoke private Result() with no args

这是我的代码:

改造界面

@POST("$/Test")
fun UpdateProfile(@Body testBody: TestBody): Single<Result<TestResult>>

结果密封类

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()

有人可以帮忙吗?为什么我会收到此错误?

4

1 回答 1

2

问题是您的改造接口返回类型:Single<Result<TestResult>>. Retrofit 无法知道您Result是多态类型,它只会尝试实例化您指定的任何类。在这种情况下Result不能直接实例化,因为它是密封的。

您需要使用非多态返回类型,或相应地配置改造

于 2021-10-03T12:07:22.577 回答