我有一些代码可以将我的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
获取的,而且运行正常。
我对任何建议都很感兴趣。
答案 0 :(得分:1)
从HttpResponse
对象中读取响应也涉及Network Operation
。只需在doInBackground()
方法中进行处理,然后修改您的AsyncTask
,以便在处理后将实际结果传递给onPostExecute()
。
答案 1 :(得分:0)
这意味着你在主线程上执行一些网络操作。这里的要点是除非流没有关闭,否则你仍在执行网络操作,所以也将该部分移到doInBackGround()
。