改进Observables并获得响应

时间:2015-02-25 12:22:33

标签: retrofit rx-java

我使用的是Retrofit和RxJava,但似乎无法做我想做的事。

这是我对我的网络服务的声明:

Observable<Response> rawRemoteDownload(@Header("Cookie") String token, @Path("programId") int programId);

我遇到的问题是webservice正在返回403和带有详细信息的json有效负载。

改造调用onError,只传递Throwable,所以我无法检查响应体。

这是我测试代码的一部分

apiManager.rawRemoteDownloadRequest("token", 1).subscribe(new Observer<Response>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            // this is called and I've lost the response!
        }

        @Override
        public void onNext(Response response) {

        }
    });

解决方案:

感谢Gomino,我将其作为解决方案:

new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            if (throwable instanceof RetrofitError) {
                Response response = ((RetrofitError) throwable).getResponse();

                System.out.println(convertToString(response.getBody()));
            }
        }

其中convertToString如下所示:

private String convertToString(TypedInput body) {
    byte[] bodyBytes = ((TypedByteArray) body).getBytes();
    return new String(bodyBytes);
}

1 个答案:

答案 0 :(得分:6)

检查throwable是否为RetrofitError:

@Override
public void onError(Throwable e) {
   if (e instanceof RetrofitError) {
      Response response = ((RetrofitError) e).getResponse();
   }
}