2011-06-03 54 views
0

我從url加載圖像。它沒問題,但是當很長一段時間它錯誤outofmemory:位圖大小超過vm預算。這裏我的代碼從URL加載圖像到位圖時的OutOfMemory

BitmapFactory.Options bmOptions; 
    bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    //from web 
    try { 
     Bitmap bitmap=null; 
     InputStream is=new URL(url).openStream(); 
     BitmapFactory.decodeStream(is, null, bmOptions); 
     is.close(); 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = 1; 
     is = new URL(url).openStream(); 
     bitmap = BitmapFactory.decodeStream(is, null, o2); 
     is.close(); 
     return bitmap; 
    } catch (Exception ex){ 
     ex.printStackTrace(); 
     return null; 
    } 

請幫助我!

+0

哪條線會出錯? – user496854 2011-06-03 07:15:33

+0

圖像有多大?檢查出這個問題以及http://stackoverflow.com/questions/2928002/outofmemoryerror-bitmap-size-exceeds-vm-budget-android – 2011-06-03 07:17:36

+0

我加載大圖像 – 2011-06-03 08:22:02

回答

2

嘗試使用BitmapFactory.Options的sampleSize,這將減少圖像存儲器的大小(和質量)

關閉輸入流

但是,如果你的圖像真的太大了,我認爲那裏沒有奇蹟的解決方案,圖像太大了...

+0

我用simpleSize圖像造成圖像很大 – 2011-06-03 07:53:02

+0

對不起,我錯過了^^'。但我認爲1的值不會改變任何內容,「如果設置爲大於1的值,請求解碼器對原始圖像進行二次採樣,返回一個較小的圖像以節省內存。」 (來自Android的參考) – Jokahero 2011-06-03 07:56:58

+0

我的應用程序加載圖像從URL顯示圖像,圖像很大。在列表視圖中,我使用simplesize,但在imageview中,如果我使用ismplesize> 1,則將圖像縮小。 – 2011-06-03 08:08:08

1

您的問題與錯誤消息中提到的一樣:您的圖像太大而無法加載到內存中。

0

嘗試使用任何其他圖像。由於這個圖像優於你的文件夾的大小。

使用模擬器來測試它嗎?

+0

沒有我使用nexus的測試 我加載圖像好每圖像,但當 – 2011-06-03 07:18:32

+0

沒有我使用nexus s測試它。 – 2011-06-03 07:19:27

0

只是一個想法,它可能是這段代碼有時會引發異常。這將導致InputStream不會釋放已簽名的資源(內存泄漏)。

如果你在一個finaly塊這個問題應該得到解決

+0

我會試一試。謝謝 – 2011-06-03 07:30:32

+0

我試了一下,但不好,它仍然出現內存不足的情況 – 2011-06-03 07:56:25