在后期Web服务中处理响应期间获取错误

时间:2012-05-22 05:48:48

标签: android memory virtual

我正在调用Web服务在地图上绘制点。我在回复中找到了750条记录。当页面第二次加载时,它会显示此错误。

致命异常:线程-26  java.lang.OutOfMemoryError     在java.lang.String。(String.java:513)     at org.apache.http.util.CharArrayBuffer.toString(CharArrayBuffer.java:261)     at org.apache.http.util.EntityUtils.toString(EntityUtils.java:141)     at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:76)     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)     在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)     在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)     在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)     在com.roundmenu.Nearme.run(Nearme.java:583)     在java.lang.Thread.run(Thread.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 Error。

1 个答案:

答案 0 :(得分:0)

Android Dalvik VM有堆限制。你能告诉Web服务返回多少字节? 如果数据量很大,建议逐步读取数据,而不是将所有数据传输到一个大的字符串缓冲区。

请参阅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) {
      ...
    }
  }
}