2015-11-29 15 views
8

La mia richiesta dovrebbe ricevere JSON per POJO o JSON descritto come errore (campi di richiesta non validi, problemi del server e così via).Errori di gestione in Retrofit 2 RX

Ma il retrofit nell'abbonato mi dà solo Throwable. Come posso scoprire che un errore di rete, che cos'è il codice http, e ottenere JSON con errore?

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()); 
    } 
} 

risposta

10

Dal momento che si sta utilizzando RxJava, onError è chiamato in caso di errori di rete ed endpoint di errore relativi fanno parte della Response. In caso di errore, verificare se il throwable è un'istanza di HttpException

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

se il controllo è vera, la si ha un errore nella richiesta. Lancia il throwable a HttpException e l'accesso è membro. Per esempio.

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

se il controllo è false allora avete un errore relativo di rete.

+0

Come posso ottenere oggetto risposta in Rx? – DmitryBorodin

+0

Ho modificato la mia risposta – Blackbelt

+0

Grazie. Ho appena controllato - onError callen in caso di qualsiasi codice http non 200. Non solo errori di rete. – DmitryBorodin