Home » Android » android – Handle errors in Retrofit 2 RX

android – Handle errors in Retrofit 2 RX

Posted by: admin June 15, 2020 Leave a comment

Questions:

My request should get either JSON for POJO or JSON described error(can be invalid request fields, server problems and so on).

But retrofit in subscriber gives me only Throwable. How can I find out is that a network error, what is http code, and get JSON with error?

private class ProjectListSubscriber extends Subscriber<ProjectListResponse> {

    @Override
    public void onCompleted() {
    }

    @Override
    public void onError(Throwable e) {
        //is that a network? http code? convert json to error POJO?
    }

    @Override
    public void onNext(ProjectListResponse projectListResponse) {
        updateProjectList(projectListResponse.getProjectList());
    }
}
How to&Answers:

Since you are using RxJava, onError is called in case of network errors and endpoints related error are part of the Response.
In case of error, check if the throwable is an instance of HttpException

public void onError(Throwable e) {
    if (e instanceof HttpException) {

if the check is true, the you have an error in your request. Cast the throwable to HttpException, and access is members. E.g.

((HttpException) e).response().errorBody()

if the check is false then you have a network related error.