Java BufferedReader值变为null

时间:2016-06-16 05:39:47

标签: java bufferedreader

我使用以下代码从API获取响应。

BufferedReader bf = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        System.out.println("bf.readLine() - " + bf.readLine());

        output = bf.readLine();
        while (output != null) {
            JSONObject obj = new JSONObject(output);
            System.out.println("output is " + output);
            resCode = obj.getString("resCode");
            resDesc = obj.getString("COUNT");
        }

我可以按如下方式返回bf.readLine()响应。

{"status":true,"data":[{"COUNT":"0"}]}

问题是当我将bf.readLine()分配给String并检查该值时,它变为null。为什么bf.readLine()显示为null(给出零点异常),即使它从API返回值。

2 个答案:

答案 0 :(得分:4)

原因是你两次调用readLine。您先在System.out.println("bf.readLine() - " + bf.readLine());output = bf.readLine();

再次致电

修改为output = bf.readLine();System.out.println("bf.readLine() - " + output);

根据oracle docs readLine()

返回: 包含行内容的String,不包括任何行终止字符;如果已到达流末尾,则为null

如果到达流的末尾,那么你将得到null并且对null的操作将给出nullpointerexception

答案 1 :(得分:1)

您的代码应为

BufferedReader bf = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));

String output = null;

        while ((output = bf.readLine()) != null) {
         System.out.println("bf.readLine() value is--- - " + output );

            JSONObject obj = new JSONObject(output);
            System.out.println("output is " + output);
            resCode = obj.getString("resCode");
            resDesc = obj.getString("COUNT");
        }