从http Get请求android读取数据时出现OutOfMemory错误

时间:2013-12-10 06:23:48

标签: android out-of-memory http-get httpservice

我正在做一个http Get请求。我需要接收大量数据,但在读取数据时会出现OutOfMemory Exception。

我的代码:

public static String getData(String url) throws CustomException {
    // http post
    InputStream is = null;
    StringBuilder sb = null;
    String result = null;
    HttpGet httppost;
    HttpEntity entity;

    try {
        HttpClient httpclient = new DefaultHttpClient();
        httppost = new HttpGet(url);
        HttpResponse response = httpclient.execute(httppost);
        entity = response.getEntity();
        is = entity.getContent();
        Log.e("log_tag", "connection success ");
    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection" + e.toString());
        throw new CustomException("Could not establish network connection");
    }

    // convert response to string
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int c;
        byte buffer[] = new byte[1024];
        while ((c = is.read(buffer)) > -1)
            baos.write(buffer, 0, c); //**OutOfMemory Exception.**
        byte[] data = baos.toByteArray();

        is.close();
        result = new String(data, 0, data.length, "utf-8");

    } catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
        throw new CustomException("Error parsing the response");
    }

    return result;

}

我传递给getData的网址是:http://ec2-50-19-105-251.compute-1.amazonaws.com/ad/Upload/getitemlist09122013014749.txt

请建议我如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

收到的文件很大,您需要将响应写入文件而不是ByteArrayOutputStream,然后尝试从文件中解析结果。

如果可能,服务器应该将大文件拆分成小块。

答案 1 :(得分:0)

一种可能的解决方案是在从服务器获取结果时实现分页。 之后,您可以逐步在某处写入数据。