2012-01-26 21 views
0

我使用這個代碼從服務器下載圖片:加載圖像,使用週期

public Bitmap getBitmap(String path){ 
    URL url=new URL(path); 
    URLConnection connection=url.openConnection(); 
    connection.setDoInput(true); 
    connection.connect(); 
    InputStream is=connection.getInputStream(); 
    Bitmap bmp=BitmapFactory.decodeStream(is); 
    return bmp; 
} 

它工作正常的1幅圖像,但如果我用這個循環中,在第二,第三等迭代它返回一些奇怪的東西(位圖的mWidthmHeight字段是-1)。 哪裏可以解決問題?

(上第二,第三等迭代path都很好,我檢查此)週期的

EDIT

實施例:

//images - is a String array 
for(int i=0; i<images.length(); i++){ 
    Bitmap bmp=getBitmap(images[i]); 
} 

SS可以看到,有在這個循環中沒有什麼不尋常

+2

請在這裏說明你如何製造這個循環。 – Gangnus

+0

在我看來,很多人在這裏降低了他們不知道如何回答的真正困難的問題。我不同意這種政治,所以我把我的贊成票放在這裏。 – Gangnus

+0

@Gangnus,問題如「錯誤在哪裏?」總是聽起來很糟糕)我的錯誤。 –

回答

1

嘗試呼叫Bitmap.recycle船尾呃你已經完成了一個位圖,但在你加載下一個之前。

問題是,即使比也許不會幫助 - 位圖不能調整自己。

也許,最好製作一個位圖陣列 - 一個永遠的路徑。

恐怕,由於優化的java機器(或編譯器)不會破壞以前的位圖,而是試圖重用它。請在這裏寫下結果。挺有趣的。

嘗試讀取圖像的大小不讀他們:

BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inJustDecodeBounds = true; 

Bitmap btemp = BitmapFactory.decodeFile(selectedImagePath,options); 

下面這段代碼使用後得到的高度和寬度:

 options.outHeight  for height 
     options.outWidth for width 

你看到了什麼?

試着改變路徑的順序 - 再次只有第一個會好嗎?如果沒有,問題出在文件中。如果是,在連接/流/工廠。

+0

你已經試過了嗎? – Gangnus

+0

我試過這個,但還是什麼都沒有。我不認爲JVM可以重用以前的值,因爲有一個BitmapFactory類,總是返回新的實例 –

+0

並且在不同的對象中加載位圖呢? – Gangnus