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
Haben Sie überprüft, ob Sie Daten vom Server erhalten? Weil theStringBuilder.toString() nicht angezeigt wird, weil beacause leer ist. – Pablo
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
ja, verwenden Sie einen Debugger, um zu sehen, dass der String tatsächlich Wert enthält –