2016-06-16 2 views
0

다음 코드를 사용하여 API에서 응답을받습니다.Java BufferedReader 값이 null이 됨

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() 응답을 반환 할 수 있습니다. 내가 문자열로 bf.readLine()를 할당하고 값을 확인할 때

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

문제는 널 (null)이된다이다. bf.readLine()이 API에서 값을 반환하는 경우에도 null (null 포인트 예외를 제공)으로 표시하는 이유는 무엇입니까?

+3

해야 하는가? – piyushj

+0

API가 'null'반환 값을 의미하는 것은 무엇을 의미합니까? 코드의 맥락에서 이것이 의미하는 바는 무엇입니까? – user2864740

+2

'readLine()'을 호출 할 때마다 그것은 앞으로 움직입니다. 'readLine()'은 줄 바꿈이 없어지면 _NullPointerException_을 발생시키는 null을 반환합니다. – Mihir

답변

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"); 
     } 
+0

코드를 주셔서 감사하고 문제를 해결하는 데 도움이됩니다. 그러나 output = bf.readLine()에 대괄호가 있어야합니다. 그걸 편집 해 주실 수 있겠습니까? 그런 다음 누군가가 직접 사용할 수 있습니다. (output = bf.readLine()! = null) 대신에 – dmaprasad

+0

코드가 업데이트됩니다 ((output = bf.readLine())! = null). 흐름을 이해하고 내가 어떻게 작동하는지 @SpringLearner 대답을 읽으십시오. –

4

이유는 readLine을 두 번 호출하기 때문입니다. , 모든 라인의 끝 문자는 포함하지 않는다 라인의 내용을 포함하는 문자열 : 당신은 오라클 문서 readLine()

반환으로 당 output = bf.readLine();System.out.println("bf.readLine() - " + output);

output = bf.readLine();

수정에 처음 System.out.println("bf.readLine() - " + bf.readLine());에서 다시 호출 스트림의 마지막에 이르렀을 경우는 null

스트림의 마지막에 이르렀을 경우는 null를 돌려 주어, null의 경우는 01을 돌려줍니다.()`두 ​​배`bf.readLine를 호출하는 이유는 232,

+0

두 번 사용했는지 알려주시겠습니까? 첫 번째는 readLine 값을 인쇄하고 두 번째 값은 값을 할당하는 것입니다. 그것은 프로 답입니까? – dmaprasad

+0

bf.readline()가 두 번 사용됩니다. readline 메서드를 두 번 호출한다는 의미입니다. – SpringLearner

+0

대단히 감사합니다. 귀하의 지침에 따라 해결 된 문제. – dmaprasad