Ich habe ein Setup, wo ich meine HTTP-Anfragen in der doInBackground()
Methode eines AsyncTask
wie folgt durchführen:Kann EntityUtils.toString() eine NetworkOnMainThreadException verursachen?
@Override
protected HttpResponse doInBackground(HttpRequestBase... httpRequests)
{
HttpResponse httpResponse = HttpClient.execute(HttpUriRequest);
return httpResponse;
}
Diese HttpResponse
wird dann auf die onPostExecute()
Methode meiner AsyncTask
weitergegeben an einem Handler übergeben werden (der ursprüngliche Anrufer der hTTP-Anforderung) und nach Bedarf verarbeitet werden, wie folgt:
- den Antwortcode Überprüfung
httpResponse.getStatusLine().getStatusCode()
verwendet wird; - Erhalten der Antwort Inhalt mit
EntityUtils.toString(httpResponse.getEntity())
).
Diese Einrichtung funktioniert auf Telefonen mit älteren Android-Versionen einwandfrei.
Meine App jetzt auf Ice Cream Sandwich (Galaxy Nexus) ausführen Ich finde, dass die ersten paar HTTP-Anfragen in meiner App wie oben funktionieren, aber dann gibt es diese http-Anfrage, die konsequent eine Ausnahme mit einem Stack-Trace wie folgt auslöst (leicht zur besseren Lesbarkeit getrimmt):
....
bei org.apache.http.util.EntityUtils.toString (EntityUtils.java:139)
bei java.io.InputStreamReader .close (InputStreamReader.java:145)
bei org.apache.http.conn.EofSensorInputStream.close (EofSensorInputStream.java:213)
...
bei libcore.io.BlockGuardOs.recvfrom (BlockGuardOs.java:151)
bei android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1084)
android.os.NetworkOnMainThreadException
Ich bin verwirrt. Bedeutet das dann, dass die EntityUtils.toString(HttpEntity)
Methode ein möglicher Schuldiger für das Werfen des neuen (und überhaupt so ärgerlichen) NetworkOnMainThreadException
ist? Wenn ja, gibt es einen Hinweis zur Überarbeitung meines Setups, um http-Anfragen in einem separaten Thread zu stellen, so dass die Antwort im Hauptthread verarbeitet werden kann?
ich das gleiche Problem haben, aber es geschieht nur auf einigen Telefonen und nur auf einige Anfragen .. Manchmal EntityUtils.toString funktioniert gut .. seltsam –
auch die Standard-charset von 'EntityUtils.toString' Vorsicht: http://stackoverflow.com/questions/30642237/what-exactly-returns-entityutils-tostringresponse/43611274#43611274 –