doInBackground()
次のようにhttpリクエストを実行する設定がありAsyncTask
ます。
@Override
protected HttpResponse doInBackground(HttpRequestBase... httpRequests)
{
HttpResponse httpResponse = HttpClient.execute(HttpUriRequest);
return httpResponse;
}
次に、このHttpResponse
オブジェクトはonPostExecute()
myのメソッドにAsyncTask
渡され、ハンドラー(httpリクエストの元の呼び出し元)に渡され、必要に応じて次のように処理されます。
httpResponse.getStatusLine().getStatusCode()
;を使用して応答コードを確認します。- を使用して応答コンテンツを取得し
EntityUtils.toString(httpResponse.getEntity())
ます。
この設定は、古いバージョンのAndroidを実行している電話で正常に機能しています。
今すぐIceCreamSandwich(Galaxy Nexus)でアプリを実行すると、上記のアプリの最初のいくつかのhttpリクエストは正常に機能しますが、次のようにスタックトレースで例外を一貫してスローするこの1つのhttpリクエストがあります(読みやすさ):
...。
org.apache.http.util.EntityUtils.toString(EntityUtils.java:139)で
java.io.InputStreamReader.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リクエストを行うようにセットアップを作り直すことについて何かアドバイスはありますか?