0

私のプロジェクトでは、HttpClient を使用して URL を呼び出し、15 ~ 20 個の Base64 文字列で JSON 応答を取得します。HttpClient コードは次のとおりです。

public static JSONObject TestHttpPost(String url,
            List<NameValuePair> nameValuePairs) {
        long t = System.currentTimeMillis();
        HttpClient client = new DefaultHttpClient();
        Log.i(TAG, "HTTPResponse received in ["
                + (System.currentTimeMillis() - t) + "ms]");
        HttpPost post = new HttpPost(url);

        try {

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = client.execute(post);
            BufferedReader rd = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent()));
            String resultString = convertStreamToString(rd);
            JSONObject jsonObjRecv = new JSONObject(resultString);
            Log.i(TAG, "<JSONObject>\n" + jsonObjRecv.toString()
                    + "\n</JSONObject>");

            return jsonObjRecv;

        } catch (Exception e) {
            return null;
        }

    }

    private static String convertStreamToString(BufferedReader reader) {
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

私は次の問題に直面しています

  1. convertStreamToString() を使用して応答を処理するたびに、応答全体を取得できません。

2 Base64 文字列のサイズが大きすぎるため、StringBuilder は画像全体の文字列を格納できません。この関数は、JSON のごく一部を返すだけです。また、処理に時間がかかりすぎます。

4

1 に答える 1

0

Log.i() は、特定の文字数の後の文字列の値を切り捨てます。文字列を受け取った可能性がありますが、印刷できません。問題を回避するには、文字をチャンクで出力します。logcat に割り当てられるリング バッファは 64k です。

于 2012-10-18T15:18:39.480 に答える