OutOfMemoryError at AbstractStringBuilder enlargeBuffer

匿名 (未验证) 提交于 2019-12-03 02:03:01

问题:

I am reading the youtube response in Stream and converting it to String. using the below code:

URL: http://gdata.youtube.com/feeds/api/users/cnn/uploads?&v=2&max-results=25&alt=json

private String convertStreamToString(InputStream is) {          BufferedReader reader = new BufferedReader(new InputStreamReader(is));         StringBuilder sb = new StringBuilder();          String line = null;         try {             while ((line = reader.readLine()) != null) {                 sb.append(line + "\n");             }                 } catch (IOException e) {             e.printStackTrace();         } finally {             try {                 is.close();             } catch (IOException e) {                 e.printStackTrace();             }         }         return sb.toString();     }  

This code is working in fine in all devices except Android 4.0 devices. I am getting the below logcat:

java.lang.RuntimeException: An error occured while executing doInBackground()         at android.os.AsyncTask$3.done(AsyncTask.java:278)         at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)         at java.util.concurrent.FutureTask.setException(FutureTask.java:124)         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)         at java.util.concurrent.FutureTask.run(FutureTask.java:137)         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)         at java.lang.Thread.run(Thread.java:856) Caused by: java.lang.OutOfMemoryError         at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)         at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)         at java.lang.StringBuilder.append(StringBuilder.java:216)         at com.android.mypack.MyApplications.convertStreamToString(MyApplications.java:959)         at com.android.mypack.MyApplications.access$61(MyApplications.java:951)         at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:2303)         at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:1)         at android.os.AsyncTask$2.call(AsyncTask.java:264)         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)         ... 5 more java.lang.OutOfMemoryError         at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)         at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)         at java.lang.StringBuilder.append(StringBuilder.java:216)         at com.android.mypack.MyApplications.convertStreamToString(MyApplications.java:959)         at com.android.mypack.MyApplications.access$61(MyApplications.java:951)         at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:2303)         at com.android.mypack.MyApplications$YoutubeTask.doInBackground(MyApplications.java:1)         at android.os.AsyncTask$2.call(AsyncTask.java:264)         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)         at java.util.concurrent.FutureTask.run(FutureTask.java:137)         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)         at java.lang.Thread.run(Thread.java:856) 

Please help me to overcome this error. Thanks in Advance.

回答1:

Well, OutOfMemoryErrors are coming obviously when the virtual machine runs out of memory. The important point here is that the exact stack trace might not be informative, because it could happen that another thread uses all of the memory. Or something memory-consuming happened on this thread before this code, and this code was only the "last straw". This URL certainly does not contain too many bytes, I think the problem is in another place.

You could try a memory analyzer: Android ==> Memory Analysing ==> Eclipse memory analyzer?



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!