改造2.0 OnFailure - 原始响应

时间:2015-10-10 11:36:42

标签: android retrofit

我正在使用retrofit来调用网络服务并且改造失败,来自'Throwable`的消息正在给我

  

java.lang.IllegalStateException:预期为BEGIN_OBJECT但在第1行第1行为STRING

我假设这是因为.Net Web服务抛出错误而不返回JSON。但为了证明这一点,我需要能够在onFailure中看到原始响应。无论如何我能做到吗?

这是我正在使用的代码

public void userLoginRequestEvent(final AuthenticateUserEvent event) {

Call call = sApi.login(event.getUsername(), event.getPassword(), OS_TYPE, DeviceInfoUtils.getDeviceName());
call.enqueue(new Callback<LoggedInUser>() {
  @Override
  public void onResponse(Response<LoggedInUser> response, Retrofit retrofit) {
    // response.isSuccess() is true if the response code is 2xx

    if (response.isSuccess()) {
      LoggedInUser user = response.body();

      AppBus.getInstance()
              .post(new UserIsAuthenticatedEvent(user, event.getUsername(),
                      event.getPassword()));
    } else {
      int statusCode = response.code();

      // handle request errors yourself
    }
  }

  @Override
  public void onFailure(Throwable t) {
    // handle execution failures like no internet connectivity
    Log.d("ERROR", t.getMessage());
  }


});

2 个答案:

答案 0 :(得分:1)

您可以使用okhttp-logging-interceptor中存在的日志拦截器。

Logging with Retrofit 2中也可以找到一个很好的例子。

答案 1 :(得分:1)

您的服务器答案只是一个字符串,而不是一个对象。使用Interceptor查看收到的回复。

添加incerceptor依赖

compile 'com.squareup.okhttp3:logging-interceptor:3.4.0'

然后将其添加到您的自定义OkHttp客户端。

OKHttp client = ....
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
client.interceptors().add(interceptor);

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("url")
        .client(client) // add custom OkHttp client

您可以查看BASICHEADERSBODY。在您的情况下,您检查BODY以查看您发送的正文以及作为响应正文发送的服务器。