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

从REST接口获取JSON解析userPin时出现空指针异常,求排查

排查空指针异常的原因及修复方案

首先,咱们来拆解你代码里的核心问题——读取响应内容的方式完全错误,这直接引发了空指针异常。

关键错误点

你在while循环里调用br.toString()来获取JSON内容,但BufferedReader.toString()返回的根本不是接口返回的文本数据,而是这个BufferedReader对象的内存标识字符串(类似java.io.BufferedReader@xxxxxx)。用这种无效字符串创建JSONObject,要么会触发JSON解析异常,要么得到的JSONObject是无效状态,当你调用json.getInt("userPin")时自然就会抛出空指针异常。

另外,你的循环逻辑也有问题:明明已经把每行内容读到了line变量里,却完全没使用这个变量,反而去调用br.toString(),等于白读了接口响应。

修复后的代码

正确的做法是把读取到的所有行拼接成完整的JSON字符串,再进行解析:

if (con.getResponseCode() == HttpsURLConnection.HTTP_OK || con.getResponseCode() == HttpsURLConnection.HTTP_ACCEPTED ) {
    String line;
    StringBuilder responseBuilder = new StringBuilder();
    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    // 把所有响应行拼接成完整的JSON字符串
    while ((line = br.readLine()) != null) {
        responseBuilder.append(line);
    }
    // 关闭流,避免资源泄漏
    br.close();
    // 用完整的JSON字符串创建解析对象
    JSONObject json = new JSONObject(responseBuilder.toString());
    userPinRetrieved = String.valueOf(json.getInt("userPin"));
}

额外优化建议

  • 记得添加异常捕获(比如JSONException、IOException),避免未处理的异常导致程序崩溃;
  • 可以用try-with-resources语法自动关闭流,代码更安全简洁:
    if (con.getResponseCode() == HttpsURLConnection.HTTP_OK || con.getResponseCode() == HttpsURLConnection.HTTP_ACCEPTED ) {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
            StringBuilder responseBuilder = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                responseBuilder.append(line);
            }
            JSONObject json = new JSONObject(responseBuilder.toString());
            userPinRetrieved = String.valueOf(json.getInt("userPin"));
        } catch (IOException | JSONException e) {
            e.printStackTrace();
            // 这里可以添加异常处理逻辑,比如给userPinRetrieved设置默认值或提示用户
        }
    }
    

这样修改后,就能正确读取并解析接口返回的JSON,顺利获取到userPin的值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:35