Обработка ответа api с использованием запечатанного класса в rxjava

#android #retrofit2 #rx-java #rx-android #sealed-class

#Android #доработка2 #rx-java #rx-android #запечатанный класс

Вопрос:

Я хочу обработать ответ 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.Результат () без аргументов

Как я могу добиться ответа, подобного

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

где subscribeOnIO

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

Комментарии:

1. Вы решили это? Я сталкиваюсь с той же проблемой

Ответ №1:

вы пробовали что-то подобное:

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

Комментарии:

1. почему вы возвращаете результат. Успех в UpdateProfie

2. это похоже на «Ожидаемый результат». и если есть ошибка, вы сопоставляете ее с Result.Failure

3. Я говорю об одном<результате. Успех<Общий ответ>>

4. да, я понял. Single<Result.Success<GenericResponse>> это ваш ожидаемый результат. Что-то, что вы хотели бы получить из запроса. И если есть какая-либо ошибка, вы сопоставляете ее с Result.Failure

5. @borichellow Я следовал тому же подходу, но я всегда получаю это исключение, java.lang.RuntimeException: не удалось вызвать private Result () без аргументов