OkHttp库Callback
接口(interface)声明为
public interface Callback {
void onFailure(Request request, IOException e);
void onResponse(Response response) throws IOException;
}
正如我最近在Callback failure for cancelled call in OkHttp中发现的那样,ontResponse方法中未处理的异常将被
Call
类吞噬我对这个设计几乎没有疑问。
首先,为了强行在
onResponse
中捕获异常而不是抛出异常,最好不使用其他onResponse
方法的声明,因为它们会被吞噬。这是
OkHttp Callback
接口(interface)的设计缺陷,还是Java中的这种代码惯例?其次,当http请求到达
onResponse
回调方法时,我希望那时候应该禁止取消请求。我会说这是一个错误。我对吗? 最佳答案
我也在为此苦苦挣扎,现在我已经解决了如下问题:
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// AlertDialog, etc.
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) {
onFailure(call, new IOException("Unexpected code: " + response));
}
// else success
}
});
关键是在OnResponse中调用OnFailure。我无法以任何其他方式访问Exception(尽管可能还有其他方式;我认为这给OnFailure带来了更多的用处,并且我认为它传达了很好的 Intent )。请注意,可以出于其他原因调用OnFailure:https://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/Callback.html
关于java - OkHttp回调会吞噬异常-设计缺陷或常见做法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32211555/