Retrofit 2.0 OnFailure - 原始响应

Retrofit 2.0 OnFailure - Raw Response

我正在使用 retrofit 调用 Web 服务,但改造失败,'Throwable` 的消息给我

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

我假设这是因为 .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());
  }


});

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

中也可以找到一个很好的例子。

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

添加拦截器依赖项

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 以查看您发送的主体以及作为响应主体发送的服务器。