1

HTTPResponseObject を に変換するコードがいくつかありますが、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()変更します。AsyncTaskonPostExecute()

于 2014-04-25T11:26:09.333 に答える
0

これは、メイン スレッドで何らかのネットワーク操作を実行していることを意味します。ここでのポイントは、ストリームが閉じられていない限り、まだネットワーク操作を実行しているため、その部分も移動しdoInBackGround()ます。

于 2014-04-25T11:23:23.630 に答える