2011-07-26 175 views
-1

我一直在收到這些錯誤,同時在這裏檢索圖片。Android內存不足錯誤?

07-26 17:21:29.194: ERROR/AndroidRuntime(396): java.lang.RuntimeException: An error occured while executing doInBackground() 
07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
     07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
     07-26 17:21:29.194: ERROR/AndroidRuntime(396):  at java.lang.Thread.run(Thread.java:1019) 
    07-26 17:21:29.194: ERROR/AndroidRuntime(396): Caused by: java.lang.OutOfMemoryError 

它發生在這裏,當我嘗試用此代碼檢索圖像。

公共無效getImages()拋出IOException異常{

DefaultHttpClient httpclient = new DefaultHttpClient(); 

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt"); 
    HttpResponse response; 

     response = httpclient.execute(httppost); 


      HttpEntity ht = response.getEntity(); 

      BufferedHttpEntity buf = new BufferedHttpEntity(ht); 

      InputStream is = buf.getContent(); 


      BufferedReader r = new BufferedReader(new InputStreamReader(is)); 

      StringBuilder total = new StringBuilder(); 
      String line; 
      while ((line = r.readLine()) != null) { 
       total.append(line + "\n"); 

       imageUrl = total.toString(); 
       Log.v("getImage1", "Retreived image"); 
      } 
    } 
+0

請搜索類似的主題。有很多。 –

+0

他們不是特定於我的問題。 –

回答

1

我會說這是因爲您使用它會嘗試加載到內存整個響應BufferedHttpEntity。你沒有嘗試過嗎?

InputStream is = response.getEntity().getContent(); 

然後處理它?

+0

如果我刪除它,那麼它會導致其他地方的語法,其中稱爲下面。 –

+0

你是什麼意思的語法?你在其他地方使用了BufferedHttpEntity嗎?我不確定你是否真的會在緩衝實體中跳過它。檢查執行情況:http://goo.gl/41MEV。它會在構造函數中創建帶有內容的字節數組,所以遲早會出現大圖像,無論如何你都會得到OOM異常。 – mariozski

+0

哇..所以我的意思是我知道必須有一個更有效的方法來做到這一點。 –

0

我不知道您是否打算這樣做,但是您將讀取的文本文件中的每行URL(?)追加到StringBuffer中,然後將指定到目前爲止讀取的URL到imageUrl 。這意味着你基本上這樣做:

imageUrl = URL1 
imageUrl = URL1, URL2 
... 
imageUrl = URL1, URL2, ... URLn 

也許這是導致內存問題。

+0

正確的做什麼即時通訊...我有我的網站上的文本文件。我有應用程序獲取文本文檔從他們讀取URL,然後將它們設置爲變量...現在,使用文本文檔的原因是因爲URL更改,這將是我可以更新應用程序的唯一方法改變網址。 –

+0

是的,但你在做什麼,你繼續分配中間線,而循環緩衝區的行。因此,您分配URl1,在下一個循環中分配URL1,URL2 ...爲什麼不直接讀入緩衝區並將其分配給最後? –

+0

你能否給我舉一個我上面代碼的例子,參考你的說法?或者你需要代碼在哪裏閱讀文本文件以獲取URL? –