我有一些将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/

10-12 05:33