我其中我執行一個AsyncTask
的doInBackground()
方法我的http請求如下的設定:可以EntityUtils.toString()導致NetworkOnMainThreadException?
@Override
protected HttpResponse doInBackground(HttpRequestBase... httpRequests)
{
HttpResponse httpResponse = HttpClient.execute(HttpUriRequest);
return httpResponse;
}
這HttpResponse
對象然後被傳遞到我的AsyncTask
的onPostExecute()
方法上的處理程序被傳遞(http請求的原始呼叫者)並按需要進行處理,如下所示:
- 使用
httpResponse.getStatusLine().getStatusCode()
檢查響應代碼; - 使用
EntityUtils.toString(httpResponse.getEntity())
獲得響應內容)。
此設置在運行舊版Android的手機上運行良好。
現在在冰淇淋三明治(Galaxy Nexus)上運行我的應用程序我發現上面的應用程序中的前幾個http請求工作正常,但後來有一個http請求一直拋出帶有堆棧跟蹤的異常,如下所示在java.io.InputStreamReader中
....
在org.apache.http.util.EntityUtils.toString(EntityUtils.java:139)
:(爲可讀性略微修整) .close(InputStreamReader.java:145)
在org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:213)
...
在libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:151)
在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
android.os.NetworkOnMainThreadException
我很困惑。這是否意味着EntityUtils.toString(HttpEntity)
方法是投擲新的(並且非常惱人的)NetworkOnMainThreadException
的潛在罪魁禍首?如果是這樣,任何關於重新設置我的設置在單獨的線程中發出http請求的建議,以便可以在主線程上處理響應?
我有同樣的問題,但它只是發生在某些手機上,並且只在一些要求。有時EntityUtils.toString工作正常..怪異 – 2012-09-10 23:19:27
另外注意EntityUtils.toString'的'默認字符集:HTTP:/ /stackoverflow.com/questions/30642237/what-exactly-returns-entityutils-tostringresponse/43611274#43611274 – 2017-04-25 12:58:51