我正在使用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());
}
});
答案 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
您可以查看BASIC
,HEADERS
和BODY
。在您的情况下,您检查BODY
以查看您发送的正文以及作为响应正文发送的服务器。