我使用以下代码从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返回值。
答案 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");
}