2016-06-16 9 views
0

Ich verwende folgenden Code, um eine Antwort von der API zu erhalten.Java BufferedReader Wert wird 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"); 
     } 

Ich kann bf.readLine() Antwort wie folgt zurückgeben.

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

Problem ist, wenn ich die bf.readLine() zu String und prüfen Sie den Wert zuweisen, es null wird. Warum bf.readLine() als Null anzeigt (gibt Nullpunkt-Ausnahme), auch wenn es den Wert von API zurückgibt.

+3

, warum 'bf.readLine Aufruf()' zweimal? – piyushj

+0

Was sagt die API, dass ein Rückgabewert "null" bedeutet? Was bedeutet das im Zusammenhang mit dem Code? – user2864740

+2

Jedes Mal, wenn Sie 'readLine()' aufrufen, geht es weiter. Sobald Sie keine zu lesenden Zeilen mehr haben, gibt 'readLine() '' null zurück, was die _NullPointerException_ verursacht. – Mihir

Antwort

1

Code sollte

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

Danke für den Code und hilfreich für das Problem zu lösen. Aber es sollte Klammern für output = bf.readLine() geben. Könntest du das bitte bearbeiten? Dann kann es jemand direkt benutzen. ((output = bf.readLine())! = null) anstelle von (output = bf.readLine()! = null) – dmaprasad

+0

Code wird auf Ihren Vorschlag hin aktualisiert. Bitte lesen Sie @SpringLearner Antwort, um den Ablauf zu verstehen und wie es funktioniert –

4

Der Grund ist, dass Sie readLine zweimal aufrufen. Sie ruft zuerst bei System.out.println("bf.readLine() - " + bf.readLine()); und wieder bei output = bf.readLine();

Modify als output = bf.readLine();System.out.println("bf.readLine() - " + output);

Wie pro Orakel docs readLine()

Returns: A String den Inhalt der Zeile enthält, nicht einschließlich Zeilenabschlusszeichen, oder null, wenn das Ende des Streams erreicht wurde.

Wenn das Ende des Streams erreicht ist, erhalten Sie null und Operationen auf null geben nullpointerexception

+0

kannst du mir bitte sagen, wo ich zweimal benutzt habe? Die erste ist zum Drucken der readLine-Wert und die zweite zum Zuweisen des Wertes. ist es ein prolem – dmaprasad

+0

bf.readline() wird zweimal verwendet, bedeutet dies, dass Sie readline-Methode zweimal aufrufen – SpringLearner

+0

Vielen Dank. Problem gelöst nach deiner Anleitung. – dmaprasad