我有一些将HTTPResponse
对象转换为JSONObject
的代码,在大多数情况下都能正常工作:
public static JSONObject httpResponseToJson(HttpResponse response) {
if (response != null) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),
"UTF-8"));
String json = reader.readLine();
if (json != null) {
JSONObject jsonObject = new JSONObject(json);
printStatus(jsonObject);
return jsonObject;
}
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
但是,有时会抛出Android
NetworkOnMainThread exception
。我无法弄清楚原因,因为响应已经完成,并且该调用中不应再包含任何网络IO。出于测试原因,如果我允许NetworkOnMainThread
,则此方法始终可以正常工作。请注意,所有的
HTTPResponse
都是用AsyncTask
提取的,这可以正常工作。我对任何建议都非常感兴趣。
最佳答案
从HttpResponse
对象读取响应也涉及到Network Operation
。只需在doInBackground()
方法中进行处理,然后修改AsyncTask
即可将处理后的真实结果传递给onPostExecute()
。
关于android - 带有InputStreamReader的BufferedReader与完成的HTTPResponse一起馈送导致NetworkOnMainThreadException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23291471/