2015-11-29 8 views
8

リクエストでは、JSON for POJOまたはJSONのエラーが発生します(リクエストフィールドやサーバーの問題などが無効になる可能性があります)。Retrofit 2でのハンドルエラーRX

しかし、加入者を改造すると私にはThrowableだけが与えられます。どうすればネットワークエラー、何がhttpコードなのか、そしてJSONエラーが出るのでしょうか? Responseの一部

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

答えて

10

あなたがRxJavaを使用しているので、onErrorがエラーを関連ネットワークエラーおよびエンドポイントの場合に呼ばれています。エラーの場合は スロー可能オブジェクトがHttpException

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

のインスタンスである場合は、チェックが真であるならば、あなたはあなたの要求にエラーを持って確認してください。スローアブルをHttpExceptionにキャストし、アクセスはメンバーです。例えば。

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

チェックがfalse、あなたはネットワーク関連のエラーを持っている場合。

+0

RxでResponseオブジェクトを取得するにはどうすればよいですか? – DmitryBorodin

+0

私の回答を編集しました – Blackbelt

+0

ありがとうございました。 HTTPコード200以外の場合は、onError callenをチェックしました。ネットワークエラーだけでなく、 – DmitryBorodin