Ответ, который вы получаете, верен, ответ отображается в doOnSuccess, потому что API
, по которому вы ударили, получен успешно, независимо от того, каким был код ответа. doOnError вызывается при сбое фактического API
вызова, например, сбоя сети в середине или некоторых проблем на стороне сервера.
Или я могу проанализировать входящий ответ в Throwable и вызвать функцию doOnError ()?
Вы не можете сделать это вместо этого, вы можете обработать ответ в doOnSuccess как
try {
api.updateProfile(**some data**)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
Log.d("----------", "Subscribed!")
}
.doOnSuccess {
if(it.isSuccessful) // responce code = 200/201
Log.d("----------", "Success!")
else if (it.responseCode == 400 ){
Log.d("----------", "Not Found!")
// Call a method that handles this according to your requirement.
PageNotFoundHandler();
// OPTIONAL throw new UserException();
}
else if (it.responseCode == 401 ){
Log.d("----------", "Not Authorised!")
// Call a method that handles this according to your requirement.
TokenExpiredHandler(); //OR
UnAuthorizedAccessHandler();
// OPTIONAL throw new UserException();
}
else {
Log.d("----------", "Some another Error!")
// Call a method that handles this according to your requirement.
// OPTIONAL throw new UserException();
}
}
.doOnError {
Log.d("----------", "Error Happened!")
}
.subscribe({
}, {
})
} catch
{
ErrorHandler();
}
Или я могу проанализировать входящий ответ в Throwable и вызвать функцию doOnError ()?
Поскольку вы упоминаете, что вы хотите бросать, вы можете достичь его с помощью блока try-catch
.
Просто бросьте пользовательский EXCEPTION
, вам нужно создать новый Класс пользовательских исключений для него.