我試圖從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
您是否檢查過您是否從服務器中收集任何數據?因爲StringBuilder.toString()沒有顯示,因爲它是空的。 – Pablo
當我將該網址粘貼到瀏覽器中時,json提示出現,網站顯示我正在撥打統計數據。另一種方法來檢查我是否收到數據? – BusterDublup
是的,使用調試器來查看字符串實際containts值 –