2016-04-20 7 views
1

Ich versuche, einen JSON-Feed von wunderground.com zu parsen und das Ergebnis im logcat anzuzeigen, aber es wird nichts gedruckt, wenn es zur Log.v-Anweisung gelangt. Ich weiß, Call wird durch, weil es auf der Analitics-Seite auf Wunderground angezeigt wird. Ich verwende Android Studio und erhalte keine Fehler oder Abstürze. Es druckt einfach nicht. Und wenn das, weil die Ergebniszeichenfolge null ist, warum hat es nicht die JSON-Daten darin? Bitte helfen Sie. Vielen Dank.Warum wird meine Ergebniszeichenfolge nach dem Parsen von JSON-Daten nicht in das Logcat geschrieben?

das ist mein AsyncTask Klasse:

class MySubAsyncTask extends AsyncTask<Object, Object, Object> { 

    @Override 
    protected String doInBackground(Object[] params) { 

     String result; 

     Log.d("TEST", "parse is working"); 

     HttpURLConnection connection = null; 
     InputStream inputStream = null; 
     BufferedReader reader = null; 


     try { 
      URL url = new URL("http://api.wunderground.com/api/MYAPIKEYHERE/forecast/geolookup/astronomy/q/FL/Tampa.json"); 
      connection = (HttpURLConnection) url.openConnection(); 
      inputStream = connection.getInputStream(); 
      reader = new BufferedReader(new InputStreamReader(inputStream)); 

      StringBuilder theStringBuilder = new StringBuilder(); 
      String line; 

      while ((line = reader.readLine()) != null) { 
       theStringBuilder.append(line); 
       theStringBuilder.append("\n"); 
      } 

      result = theStringBuilder.toString(); 

      Log.v("TEST","Full JSON string = "); 
      Log.v("TEST", result); 

      return result; 


     } catch (java.io.IOException e) { 
      Log.d("TEST","IO Error 1"); 
      e.printStackTrace(); 
     } finally { 
      if (connection != null) { 
       connection.disconnect(); 
      } 
      if (inputStream != null) { 
       try { 
        inputStream.close(); 
       } catch (IOException e) { 
        Log.d("TEST","IO Error 2"); 
        e.printStackTrace(); 
       } 
      } 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (IOException e) { 
        Log.d("TEST","IO Error 3"); 
        e.printStackTrace(); 
       } 
      } 
     } 
     Log.d("TEST", "Log after finally"); 

     return null; 
    } 

} 

Der einzige Ausgang i im logcat erhalten, ist die ersten beiden Log-Anweisungen:

04-19 22: 23: 03.022 2411-2948/com. eli.myweatherapp D/TEST: Parse arbeitet

04-19 22: 23: 03.825 2411-2948/com.eli.myweatherapp V/TEST: Voll JSON string =

Die Log-Anweisung mit meinem Ergebnis Zeichenfolge und das log stement nach dem finally block beide nicht drucken und ich habe keine ahnung warum.

edit: i hinzugefügt diesen Code vor connection.getInuptStream()

   StringBuilder builder = new StringBuilder(); 
      builder.append(connection.getResponseCode()) 
        .append(" ") 
        .append(connection.getResponseMessage()) 
        .append("\n"); 

      Map<String, List<String>> map = connection.getHeaderFields(); 
      for (Map.Entry<String, List<String>> entry : map.entrySet()) 
      { 
       if (entry.getKey() == null) 
        continue; 
       builder.append(entry.getKey()) 
         .append(": "); 

       List<String> headerValues = entry.getValue(); 
       Iterator<String> it = headerValues.iterator(); 
       if (it.hasNext()) { 
        builder.append(it.next()); 

        while (it.hasNext()) { 
         builder.append(", ") 
           .append(it.next()); 
        } 
       } 

       builder.append("\n"); 
      } 

      Log.d("TEST",builder.toString()); 

es jetzt druckt diese auf die logcat:

04-20 20: 19: 10,364 14.680-15.085/com. eli.myweatherapp D/TEST: 200 OK

Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Cache-Control: max-age = 0, no-cache Verbindung: keep-alive Content-Type: application/json; charset = UTF-8 Datum: Do, 21 Apr 2016 00:19:10 GMT Läuft ab: Do, 21 Apr 2016 00:19:10 GMT Zuletzt geändert: Do, 21 Apr 2016 00:19:10 GMT Pragma: no-cache Server: Apache/2.2.15 (CentOS) Set-Cookie: DT = 1461197950: 16390: 365-u3; Pfad = /; abläuft = Fr, 01-Jan-2020 00:00:00 GMT; domain = .wunderground.com, Prefs = FAVS: 1 | WXSN: 1 | PWSOBS: 1 | WPHO: 1 | PHOT: 1 | RADC: 0 | RADALL: 0 | HIST0: NULL | GESCHENK: 1 | PHOTOTHUMBS: 50 | EXPFCT : 1 |; Pfad = /; abläuft = Fr, 01-Jan-2020 00:00:00 GMT; domain = .wunderground.com Vary: Accept-Encoding X-Android-Received-Millis: 1461197950363 X-Android-Antwort-Quelle: NETWORK 200 X-Android-Sent-Millis: 1461197949971 X-Creation: 0,102

+0

Haben Sie überprüft, ob Sie Daten vom Server erhalten? Weil theStringBuilder.toString() nicht angezeigt wird, weil beacause leer ist. – Pablo

+0

Wenn ich die URL in einen Browser einfügen, wird der JSON-Feed angezeigt und auf der Website wird angezeigt, dass ich in der Statistik Anrufe tätige. gibt es einen anderen Weg, um nachzusehen, ob ich Daten erhalte? – BusterDublup

+0

ja, verwenden Sie einen Debugger, um zu sehen, dass der String tatsächlich Wert enthält –

Antwort

0

Der Logger druckt die Zeile nicht, wenn der Wert leer ist.

Also der spezifische Grund, dass Log.v("TEST", result); nichts gedruckt wird, ist, weil result eine leere Zeichenfolge ist.

Sie können Protokollanweisungen hinzufügen, um die Größe anzuzeigen, um dies auch zu sehen.

testete ich dies nur durch Ausführen von:

Log.v("TEST","111"); 
Log.v("TEST",""); 
Log.v("TEST","333"); 

Sie sind wahrscheinlich alle Logs nach dem finally nicht bekommen, weil Sie bereits innerhalb des try Block zurück.

Ich kann auch sehen, dass Ihr Code nicht kompilieren würde: Sie haben kein Semikolon nach getInputStream.

connection = (HttpURLConnection) url.openConnection(); 
inputStream = connection.getInputStream() 
reader = new BufferedReader(new InputStreamReader(inputStream)); 

Sind Sie sicher, dass dies der tatsächliche Code ist, den Sie in Ihrer App haben?

+0

danke, aber warum ist die Zeichenfolge dann null? Es sollte alle JSON-Daten enthalten. – BusterDublup

+0

@BusterDublup siehe mein Update über den Tippfehler auf getInputStream - ist das der ganze Code, den Sie haben? –

+0

Entschuldigung. Ja, es ist der Code, den ich benutze. Ich denke, dass Semikolon gelöscht wurde, wenn ich meine Kommentare aus dem Code löschte. Ich habe es jetzt wieder hinzugefügt. – BusterDublup

Verwandte Themen