#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 () без аргументов