1

JSON 応答のサイズが非常に大きい (7 MB になる場合がある) ため、次のコードは Android デバイス、特に GingerBread デバイスでアプリケーションをクラッシュさせるため、Android の httpclient から json 応答を取得するにはヘルプが必要です。したがって、Httpclient から JSONresponse を読み取る別の方法を知りたいと思っていました。現在の実装ではメモリが大量に消費され、ローエンド デバイスでアプリケーションがクラッシュするためです。

この問題を解決するための提案や助けをいただければ幸いです。

HttpClient httpClient = new DefaultHttpClient(ccm, params);
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Cache-Control", "no-cache; no-store");
HttpResponse httpResponse = httpClient.execute(httpGet);

response = Utils.convertStreamToString(httpResponse.getEntity().getContent());
public static String convertStreamToString(InputStream is)
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
               //System.gc();
                sb.append(line).append("\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
4

3 に答える 3

1

Google Volleyをネットワーキングに使用できます。とりわけ、サイズに関係なく JSON オブジェクトを取得するメソッドが組み込まれています。

試してみる。

于 2013-08-28T07:16:45.340 に答える
1

Google Android には、Apache HttpClient の非常に古いフォークが付属しています。ただし、基本原則は引き続き適用されます。Apache HttpClient で HTTP 応答を処理する最も効率的な方法は、ResponseHandler. 詳細については、同様の質問に対する私の回答を参照してください

于 2013-08-29T08:57:36.877 に答える
1

これを試すことができます:

public static String convertStreamToString(InputStream is)
{
    try
    {
      final char[] buffer = new char[0x10000];
      StringBuilder out = new StringBuilder();
      Reader in = new InputStreamReader(is, "UTF-8");
      int read;
      do
      {
        read = in.read(buffer, 0, buffer.length);
        if (read > 0)
        {
          out.append(buffer, 0, read);
        }
      } while (read >= 0);
      in.close();
      return out.toString();
    } catch (IOException ioe)
    {
      throw new IllegalStateException("Error while reading response body", ioe);
    }
}
于 2013-08-28T07:09:42.793 に答える