2016-06-16 137 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()レスポンスを返すことができます。

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

問題は、私はStringにbf.readLine()を割り当てて、値をチェックするとき、それはヌルになります。 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

(あなたはあなたの提案に基づいてコードを更新します(出力= bf.readLine())!= null)。フローを理解するために@SpringLearnerの答えを読んでください –

4

理由は、readLineを2回呼び出すためです。あなたはoutput = bf.readLine();System.out.println("bf.readLine() - " + output);

readLine()オラクルのドキュメントを1として戻り値としてoutput = bf.readLine();

変更で再びSystem.out.println("bf.readLine() - " + bf.readLine());で最初の呼び出しと: 行の内容を含む文字列、ただし行の終端文字は含めません、ストリームの終わりに達した場合はnull

ストリームの終わりに達した場合はnullを返し、nullの場合は01を返します。 () ``二回bf.readLineを呼ぶ理由

+0

私は2回使った場所を教えていただけますか?最初は、readLine値を印刷し、もう1つは値を代入します。これはプロンプトです – dmaprasad

+0

bf.readline()は2回使用されます。これは、readlineメソッドを2回呼び出すことを意味します。 – SpringLearner

+0

ありがとうございます。あなたの指針に従って解決された問題。 – dmaprasad

関連する問題