You need to enable JavaScript to run this app. OKHTTP发起GET/POST请求状态码正常但返回空消息体问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

OKHTTP发起GET/POST请求状态码正常但返回空消息体问题咨询

问题根因

你调用的response.toString()是Response类的默认toString实现,仅会输出响应的基础元信息(协议类型、状态码、请求地址等,也就是你日志中打印的内容),不会返回接口实际返回的响应体内容,这是你拿到空消息的核心原因。

修正方案

要获取接口返回的实际报文内容,需要调用response.body().string()方法读取响应流,注意该方法仅可调用一次,调用后响应流会被自动关闭,重复调用会返回空值。同时建议用try-with-resources语法自动管理响应资源,避免内存泄漏。

同步请求修正代码

public void Get_Synchronous() throws IOException {
    Request request = new Request.Builder()
            .url(postman_url)
            .build();

    try (Response response = client.newCall(request).execute()) {
        if (!response.isSuccessful()) {
            throw new IOException("请求异常,状态码:" + response.code());
        }
        message_body = response.body().string();
    }
}

异步请求修正代码

public void Get_Asynchronous() {
    Request request = new Request.Builder()
            .url(postman_url)
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            // 按需补充请求失败的处理逻辑
            e.printStackTrace();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            try (ResponseBody responseBody = response.body()) {
                if (!response.isSuccessful()) {
                    throw new IOException("请求异常,状态码:" + response.code());
                }
                message_body = responseBody.string();
                // 注意:此处为子线程,如需更新UI请切换到安卓主线程
            }
        }
    });
}
额外注意事项
  • OkHttp的异步回调默认执行在子线程,如果你需要将拿到的响应内容赋值给界面控件,必须通过Handler、runOnUiThread等方式切换到主线程操作,否则会触发线程访问异常。
  • 后续如果需要实现文件上传逻辑,可直接使用OkHttp提供的MultipartBody构建请求体,无需额外适配。

内容的提问来源于stack exchange,提问作者ALirezaSO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 02:27:01