1

我有一些代码可以将我的HTTPResponseObject 转换为 a 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都是用 an 获取的AsyncTask,这工作正常。

我对任何建议都很感兴趣。

4

2 回答 2

1

从对象读取响应HttpResponse也涉及到Network Operation. 只需在doInBackground()方法中处理它并修改您AsyncTask以在处理后传递给onPostExecute()实际结果。

于 2014-04-25T11:26:09.333 回答
0

这意味着您正在主线程上执行一些网络操作。这里的重点是除非流未关闭,否则您仍在执行网络操作,因此也将该部分移入doInBackGround()

于 2014-04-25T11:23:23.630 回答