You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OkHttp POST请求返回null问题排查求助

排查OkHttp POST请求返回null的问题

我来帮你梳理下代码里的关键问题,这些点很可能导致你的rs变量一直为null:

1. 空catch块吞噬了异常

你的main方法里的catch (IOException EX)块是空的!这就意味着如果post方法抛出了IO异常(比如网络连接失败、服务器返回错误状态码),你完全看不到任何错误信息,rs会保持初始的null值。

赶紧修改catch块,添加异常打印:

catch (IOException ex){
    ex.printStackTrace(); // 打印异常栈,直接看到问题根源
}

这一步是最快定位问题的关键——你会发现可能根本不是返回null,而是请求过程中抛出了异常。

2. 响应处理的不严谨

你当前的post方法没有检查响应是否成功,比如服务器返回400、500这类错误码时,response.body().string()可能返回null或者空内容,同时也不会抛出异常。

推荐用try-with-resources优化响应处理,同时添加状态码校验:

public String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(json, JSON);
    Request request = new Request.Builder()
            .url(url)
            .post(body)
            .build();
    // try-with-resources会自动关闭Response,避免资源泄漏
    try (Response response = client.newCall(request).execute()) {
        // 先校验响应是否成功(状态码200-299)
        if (!response.isSuccessful()) {
            throw new IOException("请求失败,状态码: " + response.code());
        }
        return response.body().string();
    }
}

这样如果服务器返回错误码,会直接抛出异常,你能在catch块里捕获并看到具体问题。

3. Android环境的额外检查

从你用StrictMode来看,这应该是Android项目,别忘了在AndroidManifest.xml里添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

如果没有这个权限,网络请求会直接失败,而你的空catch块会把这个异常吃掉,导致rs为null。

4. 手动拼接JSON的潜在风险

虽然你说Postman测试正常,但手动拼接JSON的方式很容易出错(比如数字格式、引号遗漏)。推荐用Gson/Jackson这类库生成JSON,避免手动拼接的低级错误:

// 先定义实体类
class LocationRequest {
    public Integer id = null;
    public String datetime = "2019-01-10T19:00:00.000+0000";
    public User user;
    public Double latitude;
    public Double longitude;

    public LocationRequest(Double lg, Double lt) {
        this.user = new User(1);
        this.longitude = lg;
        this.latitude = lt;
    }

    static class User {
        public Integer id;
        public User(Integer id) {
            this.id = id;
        }
    }
}

// 生成JSON
String bowlingJson(Double lg,Double lt) {
    Gson gson = new Gson();
    return gson.toJson(new LocationRequest(lg, lt));
}

总结

先给catch块加上异常打印,这能让你直接看到问题所在。之后再按照上面的优化点调整代码,应该就能解决rs返回null的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:42:52