Retrofit得到响应体失败(RetrofitError错误) - 异步调用

时间:2015-12-01 09:01:25

标签: android retrofit

我在一个大项目中使用Retrofit 1.9并且必须检查响应头中的一些数据,即使调用失败 - 例如分析请求代码。我们已经知道异步调用的结构:

    RestClient.get().asyncRequest(requestParams, new Callback<GenericResponse>() {
        @Override
        public void success(MyPojo pojo, Response response) {
         //we can use pojo object or use whole response

        }

        @Override
        public void failure(RetrofitError error) {
         //we can handle only error but NOT response

        }
    });

我们如何在这两种情况下分析响应?

一种解决方案是在创建Profiler时使用RestAdapter,如:

     RestAdapter restAdapter = new RestAdapter.Builder()

           //other stuff

            .setProfiler(new Profiler() {
                @Override
                public Object beforeCall() {
                    return null;
                }        

                @Override
                public void afterCall(RequestInformation requestInfo, long elapsedTime, int statusCode, Object beforeCallData) {
                  //get what I need
                    }
                })
                .build();

但也许还有另一种解决方案可以在failure()方法中获得响应。任何建议都会被贬低!

3 个答案:

答案 0 :(得分:1)

您可以从RetrofitError获取响应正文。

      @Override
        public void failure(RetrofitError error) {

         //here you get your response
          Response response = error.getResponse();

         //use data from response
         int code = response.getStatus();
         List<Header> =  response.getHeaders();
         // ...

        }

答案 1 :(得分:0)

我认为这将解决您的问题

 RestAdapter restAdapter = new RestAdapter.Builder()

           //other stuff

            .setProfiler(new Profiler() {
                @Override
                public Object beforeCall() {
                    return null;
                }        

                @Override
                public void afterCall(RequestInformation requestInfo, long elapsedTime, int statusCode, Object beforeCallData) {
                  //get what I need
                    }
                })
                 .setLogLevel(RestAdapter.LogLevel.FULL).build();

现在你可以得到回复

public void failure(RetrofitError error) {
  String json =  new String(((TypedByteArray)error.getResponse().getBody()).getBytes());
    Log.v("failure", json.toString());
 }

答案 2 :(得分:0)

改造中的故障方法只告诉发生错误,如果想要在改造时检查错误方法的参数,或者如果要在失败时再次调用,则可以再次调用该服务。