gpt4 book ai didi

java - OkHttp 回调吞噬异常 - 设计缺陷或常见做法

转载 作者:行者123 更新时间:2023-12-04 19:44:39 25 4
gpt4 key购买 nike

OkHttp 库 Callback接口(interface)声明为

public interface Callback {
void onFailure(Request request, IOException e);
void onResponse(Response response) throws IOException;
}

onResponse 方法中未处理的异常将被 Call 吃掉我最近在 Callback failure for cancelled call in OkHttp 中发现的类

我有几个与该设计相关的问题。

首先, 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。我无法以任何其他方式访问异常(尽管可能还有其他方式;在我看来,这给了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com