2012-12-18 51 views
12

मैं स्ट्रीम में यूट्यूब प्रतिक्रिया पढ़ रहा हूं और इसे स्ट्रिंग में परिवर्तित कर रहा हूं। नीचे दिए गए कोड का उपयोग कर:AbOfMemoryError AbstractStringBuilder enlargeBuffer

यूआरएल: 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(); 
    } 

इस कोड को छोड़कर Android 4.0 उपकरणों सभी उपकरणों में ठीक में काम कर रहा है। मुझे नीचे लॉगैक मिल रहा है:

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) 

कृपया इस त्रुटि को दूर करने में मेरी सहायता करें। अग्रिम में धन्यवाद।

+0

कितने बाइट्स इस धारा से आ रहे हैं:

आप एक स्मृति विश्लेषक की कोशिश कर सकते? – lbalazscs

+0

@lbalazscs कृपया यूआरएल देखें, यही वह प्रतिक्रिया है जिसे मैं संभालना चाहता हूं .. मुझे नहीं पता कि 4.0 उपकरणों के साथ समस्या क्या है। – wolverine

+0

आपको कोई समाधान मिला? – CoronaPintu

उत्तर

1

ठीक है, आउटऑफमेमरी एरर स्पष्ट रूप से आ रहे हैं जब आभासी मशीन स्मृति से बाहर हो जाती है। यहां महत्वपूर्ण बात यह है कि सटीक स्टैक ट्रेस जानकारीपूर्ण नहीं हो सकता है, क्योंकि ऐसा हो सकता है कि एक और थ्रेड सभी मेमोरी का उपयोग करता है। या इस कोड से पहले इस धागे पर कुछ स्मृति-उपभोग हुआ, और यह कोड केवल "आखिरी पुआल" था। इस यूआरएल में निश्चित रूप से बहुत से बाइट्स नहीं हैं, मुझे लगता है कि समस्या किसी अन्य जगह पर है। Android ==> Memory Analysing ==> Eclipse memory analyzer?

+0

हुह, मैं इस धारणा के तहत था कि वीएम आवंटन और असफल होने के बाद इस अपवाद को फेंक देगा ... इसका मतलब यह होगा कि स्टैक ट्रेस वास्तव में उपयोगी है, और इसके शीर्ष पर, यह बफर को बढ़ाने के लिए सही समझ में आता है एक ओम अपवाद ... – edthethird

+0

बेशक, वीएम आवंटन और असफल होने के बाद इसे फेंक देगा। सवाल यह है कि क्या यह आवंटन अन्य आवंटन या मूल कारण के बाद ही "आखिरी पुआल" था। इस धारा में लगभग 110 केबीईटी डेटा है, यह ज्यादा नहीं होना चाहिए। – lbalazscs

+1

आह ठीक है। हाँ, हम सब कुछ निश्चित रूप से जान सकते हैं कि यह आखिरी पुआल था। यह बहुत संभव है/संभावना है कि उसके पास मेमोरी लीक कहीं और है – edthethird