Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handle errors in Retrofit 2 RX

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());
    }
}
like image 955
DmitryBorodin Avatar asked Nov 29 '15 12:11

DmitryBorodin


People also ask

What is the difference between RxJava and retrofit?

Rx gives you a very granular control over which threads will be used to perform work in various points within a stream. To point the contrast here already, basic call approach used in Retrofit is only scheduling work on its worker threads and forwarding the result back into the calling thread.

What is RxJava?

RxJava is a Java library that enables Functional Reactive Programming in Android development. It raises the level of abstraction around threading in order to simplify the implementation of complex concurrent behavior.


1 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.

like image 161
Blackbelt Avatar answered Oct 13 '22 01:10

Blackbelt