2016-04-20 31 views
1

我試圖從wunderground.com解析一個Json feed並在logcat中顯示結果,但是當它到達Log.v語句時什麼都不打印。我知道電話正在通過,因爲它出現在wunderground的分析頁面上。我正在使用Android Studio,但沒有收到任何錯誤或崩潰。它只是不打印。如果因爲結果字符串爲空,爲什麼它沒有json數據呢?請幫忙。謝謝。解析json數據後,爲什麼我的結果字符串不能打印到logcat?

這是我的AsyncTask類:

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; 
    } 

} 

唯一的輸出我在logcat中得到的是前兩個日誌語句:

04-19 22:23:03.022 2411年至2948年/ COM。 eli.myweatherapp d/TEST:解析工作

04-19 22:23:03.825 2411年至2948年/ com.eli.myweatherapp V /測試:滿JSON字符串=

日誌聲明與我的結果字符串和在finally塊之後的日誌staement都不打印,我不知道爲什麼。

編輯: 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()); 

現在它打印這個到的logcat:

04-20 20:19:10.364 14680-15085/COM。 eli.myweatherapp d/TEST:200 OK

訪問控制允許的憑據:真 訪問控制允許來源:* 緩存控制:最大年齡= 0,無緩存 連接:keep-alive Content-Type:application/json; charset = UTF-8 日期:2016年4月21日星期四00:19:10 GMT 過期時間:2016年4月21日星期四00:19:10 GMT 最後修改日期:2016年4月21日星期四00:19:10 GMT Pragma:no-cache 服務器:Apache/2.2.15(CentOS) Set-Cookie:DT = 1461197950:16390:365-u3;路徑= /;到期日=週五,2020年1月1日00:00:00 GMT; domain = .wunderground.com,Prefs = FAVS:1 | WXSN:1 | PWSOBS:1 | WPHO:1 | PHOT:1 | RADC:0 | RADALL:0 | HIST0:NULL | gIFT:1 | PHOTOTHUMBS:50 | EXPFCT :1 |;路徑= /;到期日=週五,2020年1月1日00:00:00 GMT;域= .wunderground.com 有所不同:接受編碼 X-Android的接收-毫秒時間:1461197950363 X-Android的響應-來源:網絡200 X-Android的發送-毫秒時間:1461197949971 X-CREATIONTIME:0.102

+0

您是否檢查過您是否從服務器中收集任何數據?因爲StringBuilder.toString()沒有顯示,因爲它是空的。 – Pablo

+0

當我將該網址粘貼到瀏覽器中時,json提示出現,網站顯示我正在撥打統計數據。另一種方法來檢查我是否收到數據? – BusterDublup

+0

是的,使用調試器來查看字符串實際containts值 –

回答

0

如果值爲空,記錄器將不會打印行。

所以Log.v("TEST", result);不打印任何東西的具體原因,是因爲result是一個空字符串。

您可以添加日誌語句以顯示大小以查看此。

我測試了這個剛剛通過運行:

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

你可能不finally後獲得任何日誌,因爲你已經在try塊內返回。

我也可以看到你的代碼不會編譯:你在getInputStream之後沒有分號。

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

您確定這是您的應用中的實際代碼嗎?

+0

謝謝,但爲什麼字符串爲null呢?它應該包含所有的json數據。 – BusterDublup

+0

@BusterDublup在getInputStream中查看我的關於錯字的更新 - 這是您擁有的整個代碼嗎? –

+0

對不起。是的,這是我使用的代碼。我認爲當我從代碼中刪除我的評論時,分號得到了刪除。我現在加回來了。 – BusterDublup

相關問題