0

マップ上にポイントを描画するために Web サービスを呼び出しています。応答で 750 レコードを見つけました。ページが2回目にロードされると、このエラーが表示されます。

致命的な例外: org.apache.http.util.CharArrayBuffer.toString(CharArrayBuffer.java:261) の java.lang.String.(String.java:513) のスレッド 26 java.lang.OutOfMemoryError .util.EntityUtils.toString(EntityUtils.java:141) org.apache.http.util.EntityUtils.toString(EntityUtils.java:146) org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java) :76) org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59) で org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657) で org.apache. org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616) で http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627) 583) java.lang で。Thread.run(スレッド.java:1019)

@Override
public void run() {
    try {
        HttpGet post = null;

        Log.e("", "Share.isfromfilter =  " + Share.isfromfilter);
        if (Share.isfromfilter) {

            Log.e("", "Teset 1");

            Log.e("", "Share.CuisineValue =  " + Share.CuisineValue);

            if (Share.CuisineValue.equalsIgnoreCase("")) {
                Log.e("", "Teset 2");
                post = new HttpGet("my url here");
            } else {
                Log.e("", "Teset 3");
                post = new HttpGet("my url here");
            }

        } else {
            Log.e("", "Teset 4");
            post = new HttpGet("my url here");

        }
        post.addHeader("apikey", "880639B3638597349AC1BE6F70FC5682");
        ResponseHandler<String> responseHandler = new BasicResponseHandler();

        response = client.execute(post, responseHandler);
        System.out.println("----------------------------------------");
        System.out.println(response);

        handler.sendEmptyMessage(0);
    } catch (Exception e) {
        e.printStackTrace();
        handler.sendEmptyMessage(1);
    }
}

このコードの実行中に、VM Out of Budget エラーも発生します。

4

1 に答える 1

0

Android Dalvik VM にはヒープ制限があります。Web サービスから返されたバイト数を教えてください。データ サイズが大きい場合は、すべてを 1 つの大きな文字列バッファーに転送するのではなく、データを段階的に読み取ることをお勧めします。

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/HttpClient.htmlを参照してください。

HttpResponse response = httpclient.execute(post);
HttpEntity entity = response.getEntity();

if (entity != null) {
  InputStream instream = entity.getContent();
  try {
    BufferedReader reader = new BufferedReader(
             new InputStreamReader(instream));
    String data = null;
    while ((data = reader.readLine()) != null) {
      ...
    }
  }
}
于 2012-05-22T08:03:38.533 に答える