【发布时间】:2015-09-17 18:00:59
【问题描述】:
我正在使用以下回调方法拨打电话:
Callback<PeopleList> callback = new Callback<PeopleList>() {
@Override
public void onResponse(Response<PeopleList> response) {
Toast.makeText(LoginActivity.this,getString(R.string.login_failed), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Throwable t) {
Toast.makeText(LoginActivity.this,getString(R.string.login_failed), Toast.LENGTH_SHORT).show();
}
};
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
retrofit.create(MyService.class).getPeopleData().enqueue(callback);
到如下界面:
public interface MyService {
@Headers("Accept: application/json")
@GET("/data/people/")
Call<PeopleList> getPeopleData();
}
这个回调在成功的请求上工作得很好。但是,在不成功的情况下,它并没有给我进一步调查的机会,因为 onFailure 方法不允许我检索响应附带的 http 错误代码。
在进一步调查中,我发现根据几个 stackoverflow 线程,即使请求不成功,也应该调用 onResponse 方法。然而,这似乎不仅与我的个人经验不一致,而且与回调接口的文档不一致,其中指出:
传达来自服务器的响应或离线请求。一种且只有一种方法将是 响应给定请求而调用。
那么问题来了,如果不调用 onResponse 方法,我如何从失败的响应中获取 HTTP 错误代码?
【问题讨论】:
-
将调用两种方法之一。除了在
onFailure上敬酒,你能做一个t.printStackTrace()吗?然后您可以查看您的 logcat 以了解错误的来源。