首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HttpOk:调用client.newCall(请求).execute()故意存在程序

HttpOk:调用client.newCall(请求).execute()故意存在程序
EN

Stack Overflow用户
提问于 2022-01-10 12:26:51
回答 1查看 379关注 0票数 0

我正在使用HttpOK库和Java。我编写了以下代码:

代码语言:javascript
复制
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

...

public class RunFeed implements Runnable {

 private final OkHttpClient client = new OkHttpClient();

 ...

 private Response executeRequest(Request request){

    try {
        final Call call = client.newCall(request);
        Response response = call.execute();
        if (!response.isSuccessful()) {
            throw new IOException("Unexpected code " + response);
        }
        return response;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
 }
}

我编写这类脏代码的原因是试图捕获在call.execute();行上抛出的异常。

当程序到达这一行时,程序退出(以某种方式成功),没有到达返回响应语句,也没有抛出任何异常,也没有进入catch块或到达最后一个,是的,我知道--“脏”返回空语句.

客户端和请求对象不是空的,在我看来是有效的。

另一点需要说明的是,我是在一个可运行的实现类中运行代码。

顺便说一句,当调试器到达call.execute();行时,我计算得到的表达式:

响应{protocol=http/1.1,code=200,message=OK,url=http://myurl}

看来一切都很好。但是在那之后,当我按下“步骤”按钮时,它只是完成了执行,而不是前进到if (!response.isSuccessful()).

请给我建议。

EN

回答 1

Stack Overflow用户

发布于 2022-01-10 13:47:49

您可以在另一个线程上而不是在主线程上运行executeRequest()方法,而call.execute()运行在主线程上。所以,当您调试call.execute()时,有足够的时间准备响应,但是当应用程序运行时,它没有这个机会,executeRequest()继续在另一个线程上执行。

我建议考虑使用call.enqueue()而不是call.execute()

更新

如果您正在尝试测试okhttp调用,请考虑使用mockwebserver

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70652381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档