具有许多Base64 String的Android Web服务响应JSON无法正常工作

时间:2012-10-18 12:43:58

标签: android json

在我的项目中,我使用HttpClient调用URL,并使用15-20 Base64 String获取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. 2由于Base64字符串大小太大,StringBuilder无法存储整个图像String。该函数只返回JSON的一小部分。而且需要花费太多时间来处理。

1 个答案:

答案 0 :(得分:0)

Log.i()在一定数量的字符后截断字符串的值。您可能收到了字符串,但无法打印它。以块的形式打印字符以解决问题。分配给logcat的环形缓冲区是64k。