OutOfMemoryError异常:当接收2.3 MB XML响应 [英] OutOfMemoryError : When receiving XML response of 2.3 MB

查看:216
本文介绍了OutOfMemoryError异常:当接收2.3 MB XML响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是一个连接到Web服务并接收来自服务器的XML响应大约是2.3MB方法简单,我得到的 的OutOfMemoryError 我已经提到这个),但未能找到我的路,坚持不好

 公共同步串getUpdates(布尔新闻)抛出异常{
        串响应=无效;
        HttpPost httppost;
        DefaultHttpClient HttpClient的;
        ResponseHandler的<字符串> RES =新BasicResponseHandler();
        名单<的NameValuePair> namevaluepairs中;
        httppost =新HttpPost(context.getString(R.string.SYNCURL));
        的HttpParams PARAMS =新BasicHttpParams();
        HttpProtocolParams.setContentCharset(PARAMS,UTF-8);

        字符串lastupdate = NULL;
        共享preferences preferences = context.getShared preferences(context.getPackageName(),Context.MODE_PRIVATE);
        lastupdate = preferences.getString(LAST_UPDATE,DatabaseHelper.updateDate);
        如果(新闻)lastupdate = preferences.getString(LAST_UPDATE_NEWS,lastupdate);

        HttpClient的=新DefaultHttpClient(PARAMS);
        namevaluepairs中=新的ArrayList<的NameValuePair>(2);
        nameValuePairs.add(新BasicNameValuePair(reqDTTM,lastupdate));
        如果(新闻)nameValuePairs.add(新BasicNameValuePair(doAction,新京报));
        如果(!preferences.getString(LAST_UPDATE,).equalsIgnoreCase(DatabaseHelper.updateDate)){
            字符串timezon = UDFHelper.getTimeZon(上下文);
            nameValuePairs.add(新BasicNameValuePair(TZ,timezon));
        }
        httppost.setEntity(新UrlEn codedFormEntity(namevaluepairs中));
        响应= httpclient.execute(httppost,RES);
        返回响应;
}
 

这会导致问题的尝试检索字符串响应大文:

  

响应= httpclient.execute(httppost,RES);

我存储在字符串的响应。那是一个问题吗?什么是,替代的解决方案?

下面是LogCat中

  10月9号至23号:07:31.654:信息/ ActivityManager(59):显示活动uk.co.dodec.rcgpapp / .SplashScreen:1267毫秒(共1267毫秒)
10月9号至23日:07:35.854:信息/ dalvikvm堆(334):增长堆(破片的情况下),以3.213MB为262160字节分配
10月9号至23日:07:38.203:信息/ dalvikvm堆(334):增长堆(破片的情况下),以3.586MB为524304字节分配
10月9号至23日:07:42.753:信息/ dalvikvm堆(334):增长堆(破片的情况下),以4.336MB为1048592字节分配
10月9号至23日:07:52.024:信息/ dalvikvm堆(334):增长堆(破片的情况下),以5.836MB为2097168字节分配
10月9号至23日:08:09.844:信息/ dalvikvm堆(334):增长堆(破片的情况下),以8.836MB为4194320字节分配
10月9号至23日:08:09.864:信息/ ActivityManager(59):过程com.android.mms(PID 227)已经死亡。
10月9号至23日:08:45.984:信息/ dalvikvm堆(334):强制收集SoftReferences为8388624字节分配
10月9号至23日:08:46.0​​33:ERROR / dalvikvm堆(334):内存在8388624字节分配。
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):AsyncTask的#1PRIO = 5 TID = 7 RUNNABLE
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):|组=主SCOUNT = 0 dsCount = 0 S = N的obj = 0x43e54fd8自我= 0x224d58
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):| sysTid = 340漂亮= 10 sched的= 0/0 CGRP = bg_non_interactive手柄= 2248344
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):| schedstat =(1248172861 2043417240 1093)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.util.CharArrayBuffer.expand(CharArrayBuffer.java:~59)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.util.CharArrayBuffer.append(CharArrayBuffer.java:77)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.util.EntityUtils.toString(EntityUtils.java:136)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:76)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在uk.co.dodec.rcgpapp.helper.HttpHelper.getUpdates(HttpHelper.java:172)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在uk.co.dodec.rcgpapp.SplashScreen.getUpdate(SplashScreen.java:155)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在uk.co.dodec.rcgpapp.SplashScreen $ getUpdates.doInBackground(SplashScreen.java:126)
10月9号至23日:08:46.0​​33:信息/ dalvikvm(334):在uk.co.dodec.rcgpapp.SplashScreen $ getUpdates.doInBackground(SplashScreen.java:1)
10月9号至23日:08:46.0​​43:信息/ dalvikvm(334):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)
10月9号至23日:08:46.0​​43:信息/ dalvikvm(334):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
10月9号至23日:08:46.0​​43:信息/ dalvikvm(334):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
10月9号至23日:08:46.0​​43:信息/ dalvikvm(334):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
10月9号至23日:08:46.0​​43:信息/ dalvikvm(334):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:561)
10月9号至23日:08:46.0​​43:信息/ dalvikvm(334):在java.lang.Thread.run(Thread.java:1096)
10月9号至23日:10:3​​7.353:WARN / dalvikvm(334):主题ID = 7:线程退出与未捕获的异常(组= 0x4001d800)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):致命异常:AsyncTask的#1
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):java.lang.RuntimeException的:一个错误而执行doInBackground发生()
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在android.os.AsyncTask $ 3.done(AsyncTask.java:200)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:273)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:307)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:561)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.lang.Thread.run(Thread.java:1096)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):由:java.lang.OutOfMemoryError
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.util.CharArrayBuffer.expand(CharArrayBuffer.java:59)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.util.CharArrayBuffer.append(CharArrayBuffer.java:77)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.util.EntityUtils.toString(EntityUtils.java:136)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:76)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在uk.co.dodec.rcgpapp.helper.HttpHelper.getUpdates(HttpHelper.java:172)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在uk.co.dodec.rcgpapp.SplashScreen.getUpdate(SplashScreen.java:155)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在uk.co.dodec.rcgpapp.SplashScreen $ getUpdates.doInBackground(SplashScreen.java:126)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在uk.co.dodec.rcgpapp.SplashScreen $ getUpdates.doInBackground(SplashScreen.java:1)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
10月9号至23日:10:3​​7.375:ERROR / AndroidRuntime(334):4 ...更多
10月9号至23日:10:3​​7.393:WARN / ActivityManager(59):强制完成活动uk.co.dodec.rcgpapp / .SplashScreen
 

我试过下面没有工作

 的Htt presponse R = httpclient.execute(httppost);

HttpEntity实体= r.getEntity();

InputStream的时间=新ByteArrayInputStream的(EntityUtils.toByteArray(实体));

文件F1 =新的文件(Environment.getDataDirectory()的toString()+/数据/+ context.getPackageName()+/+ FOLDER_NAME);
如果fl.mkdir()(fl.exists()!);

。字符串PATH = Environment.getDataDirectory()的toString()+/数据/+ context.getPackageName()+/+ FOLDER_NAME +/+update.xml;
FileOutputStream中F =新的FileOutputStream(PATH);

byte []的缓冲区=新的字节[1024];
INT LEN1 = 0;
而((LEN1 = in.read(缓冲液))大于0){
    f.write(缓冲液,0,LEN1);
}
f.close();
 

解决方案

这的确是一个问题:不要那样做。你应该写的响应文件或解析流,但绝对不要试图生成2.3 MB的字符串。写一个响应处理程序返回 HttpEntity 的反应背后,然后用获得的InputStream <一href="http://developer.android.com/reference/org/apache/http/HttpEntity.html#getContent%28%29">getContent方法,然后保存到一个文件,然后处理该文件。

Following is simple method that connects to web service and receives the XML response from server which is about 2.3MB and I'm getting OutOfMemoryError (I've referred this) but not being able to find my way, stuck badly

public synchronized String getUpdates(boolean news) throws Exception {
        String response = null; 
        HttpPost httppost;
        DefaultHttpClient httpclient;
        ResponseHandler <String> res=new BasicResponseHandler();  
        List<NameValuePair> nameValuePairs;
        httppost = new HttpPost(context.getString(R.string.SYNCURL));  
        HttpParams params = new BasicHttpParams();  
        HttpProtocolParams.setContentCharset(params, "UTF-8");

        String lastupdate = null;
        SharedPreferences preferences = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
        lastupdate = preferences.getString(LAST_UPDATE, DatabaseHelper.updateDate);
        if(news) lastupdate = preferences.getString(LAST_UPDATE_NEWS, lastupdate);

        httpclient = new DefaultHttpClient(params);
        nameValuePairs = new ArrayList<NameValuePair>(2);  
        nameValuePairs.add(new BasicNameValuePair("reqDTTM", lastupdate));
        if(news)nameValuePairs.add(new BasicNameValuePair("doAction", "news"));
        if(!preferences.getString(LAST_UPDATE, "").equalsIgnoreCase(DatabaseHelper.updateDate)) {
            String timezon = UDFHelper.getTimeZon(context);
            nameValuePairs.add(new BasicNameValuePair("tz", timezon));
        }
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  
        response = httpclient.execute(httppost, res);
        return response;
}

Here it causes problem trying to retrieve large text in String response :

response = httpclient.execute(httppost, res);

I'm storing the response in String. Is that a problem? What is alternative solution of that?

Here is LogCat

09-23 10:07:31.654: INFO/ActivityManager(59): Displayed activity uk.co.dodec.rcgpapp/.SplashScreen: 1267 ms (total 1267 ms)
09-23 10:07:35.854: INFO/dalvikvm-heap(334): Grow heap (frag case) to 3.213MB for 262160-byte allocation
09-23 10:07:38.203: INFO/dalvikvm-heap(334): Grow heap (frag case) to 3.586MB for 524304-byte allocation
09-23 10:07:42.753: INFO/dalvikvm-heap(334): Grow heap (frag case) to 4.336MB for 1048592-byte allocation
09-23 10:07:52.024: INFO/dalvikvm-heap(334): Grow heap (frag case) to 5.836MB for 2097168-byte allocation
09-23 10:08:09.844: INFO/dalvikvm-heap(334): Grow heap (frag case) to 8.836MB for 4194320-byte allocation
09-23 10:08:09.864: INFO/ActivityManager(59): Process com.android.mms (pid 227) has died.
09-23 10:08:45.984: INFO/dalvikvm-heap(334): Forcing collection of SoftReferences for 8388624-byte allocation
09-23 10:08:46.033: ERROR/dalvikvm-heap(334): Out of memory on a 8388624-byte allocation.
09-23 10:08:46.033: INFO/dalvikvm(334): "AsyncTask #1" prio=5 tid=7 RUNNABLE
09-23 10:08:46.033: INFO/dalvikvm(334):   | group="main" sCount=0 dsCount=0 s=N obj=0x43e54fd8 self=0x224d58
09-23 10:08:46.033: INFO/dalvikvm(334):   | sysTid=340 nice=10 sched=0/0 cgrp=bg_non_interactive handle=2248344
09-23 10:08:46.033: INFO/dalvikvm(334):   | schedstat=( 1248172861 2043417240 1093 )
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.util.CharArrayBuffer.expand(CharArrayBuffer.java:~59)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.util.CharArrayBuffer.append(CharArrayBuffer.java:77)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.util.EntityUtils.toString(EntityUtils.java:136)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:76)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
09-23 10:08:46.033: INFO/dalvikvm(334):   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
09-23 10:08:46.033: INFO/dalvikvm(334):   at uk.co.dodec.rcgpapp.helper.HttpHelper.getUpdates(HttpHelper.java:172)
09-23 10:08:46.033: INFO/dalvikvm(334):   at uk.co.dodec.rcgpapp.SplashScreen.getUpdate(SplashScreen.java:155)
09-23 10:08:46.033: INFO/dalvikvm(334):   at uk.co.dodec.rcgpapp.SplashScreen$getUpdates.doInBackground(SplashScreen.java:126)
09-23 10:08:46.033: INFO/dalvikvm(334):   at uk.co.dodec.rcgpapp.SplashScreen$getUpdates.doInBackground(SplashScreen.java:1)
09-23 10:08:46.043: INFO/dalvikvm(334):   at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-23 10:08:46.043: INFO/dalvikvm(334):   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-23 10:08:46.043: INFO/dalvikvm(334):   at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-23 10:08:46.043: INFO/dalvikvm(334):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-23 10:08:46.043: INFO/dalvikvm(334):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-23 10:08:46.043: INFO/dalvikvm(334):   at java.lang.Thread.run(Thread.java:1096)
09-23 10:10:37.353: WARN/dalvikvm(334): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
09-23 10:10:37.375: ERROR/AndroidRuntime(334): FATAL EXCEPTION: AsyncTask #1
09-23 10:10:37.375: ERROR/AndroidRuntime(334): java.lang.RuntimeException: An error occured while executing doInBackground()
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.lang.Thread.run(Thread.java:1096)
09-23 10:10:37.375: ERROR/AndroidRuntime(334): Caused by: java.lang.OutOfMemoryError
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.util.CharArrayBuffer.expand(CharArrayBuffer.java:59)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.util.CharArrayBuffer.append(CharArrayBuffer.java:77)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.util.EntityUtils.toString(EntityUtils.java:136)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:76)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at uk.co.dodec.rcgpapp.helper.HttpHelper.getUpdates(HttpHelper.java:172)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at uk.co.dodec.rcgpapp.SplashScreen.getUpdate(SplashScreen.java:155)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at uk.co.dodec.rcgpapp.SplashScreen$getUpdates.doInBackground(SplashScreen.java:126)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at uk.co.dodec.rcgpapp.SplashScreen$getUpdates.doInBackground(SplashScreen.java:1)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-23 10:10:37.375: ERROR/AndroidRuntime(334):     ... 4 more
09-23 10:10:37.393: WARN/ActivityManager(59):   Force finishing activity uk.co.dodec.rcgpapp/.SplashScreen

I've tried following not worked

HttpResponse r = httpclient.execute(httppost);

HttpEntity entity = r.getEntity();

InputStream in = new ByteArrayInputStream(EntityUtils.toByteArray(entity));

File fl = new File(Environment.getDataDirectory().toString() + "/data/" + context.getPackageName() + "/" + FOLDER_NAME);
if(!fl.exists()) fl.mkdir();

String PATH = Environment.getDataDirectory().toString() + "/data/" + context.getPackageName() + "/" + FOLDER_NAME + "/" + "update.xml";
FileOutputStream f = new FileOutputStream(PATH);

byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = in.read(buffer)) > 0) {
    f.write(buffer, 0, len1);
}
f.close();

解决方案

That is indeed a problem: don't do that. You should write the response to a file or parse the stream but definitely don't try generating a 2.3 MB string. Write a response handler that returns the HttpEntity behind the response, then get the InputStream using the getContent method, then save that to a file and then process the file.

这篇关于OutOfMemoryError异常:当接收2.3 MB XML响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆