2014-12-29 208 views
2

基本上我解析了一些帶有圖像的JSON,並試圖將它加載到ImageView中。但是mBitmap返回null。我不知道爲什麼和進一步的研究並沒有幫助..爲什麼BitmapFactory.decodeStream返回null?

下面是一個例子網址我一起工作:

http://b.thumbs.redditmedia.com/ivBAJzLMJEkEy9jgTy3z4n-mO7gIGt5mQFU1Al5kJ-I.jpg 

這裏是所有相關代碼:

public static Bitmap LoadImageFromUrl(String url){ 
    try { 
     mBitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent()); 
     return mBitmap; 
    }catch (Exception e){ 
     Log.d(TAG,"Error getting image"); 
     return null; 
    } 
} 

這裏是哪裏該方法被稱爲:

mListingModel.setmImageView(LoadImageFromUrl(data.getString(JSON_THUMBNAIL))); 

這裏是我設置的ImageView:

if(mItem.getmImageView() != null) { 
     holder.imageView.setImageBitmap(mItem.getmImageView()); 
    } 

注意:我在AsyncTask中調用方法,所以不是問題。

+0

你的應用擁有什麼樣的權限?另外:包括你的logcat,以防萬一在那裏有東西... – DigCamara

+0

我會建議使用任何數十個圖像庫進行圖像加載,而不是嘗試在URL上使用'getContent()'。你更有可能得到更多的日誌信息,可以幫助你隔離你的問題,他們通常可以處理異步填充'ImageView'。例如,考慮[畢加索](http://square.github.io/picasso/)。 – CommonsWare

+0

@DigCamara我的清單中已包含Internet權限,因爲它正在從網站加載其他數據。當我回家時,我會嘗試包括我的logcat信息。 – MrTimotheos

回答

0

您可以檢查這對你的作品:

InputStream in = new java.net.URL(downloadURL).openStream(); 
Bitmap avatarBmp = BitmapFactory.decodeStream(in); 
in.close(); 

也提醒到你的清單

<uses-permission android:name="android.permission.INTERNET" /> 
0

我在就像我流過去的愚蠢的問題,達到了添加此結束之前我解碼它,所以請確保在解碼流之前將其位置設置爲0。

stream.Position = 0; 
var bmp = BitmapFactory.DecodeStream(stream); 
0

Bitmap.decodeStream()的Javadoc指出:

如果輸入流爲空,或者無法用於解碼的位圖,該 函數返回空值

你通過它的結果URL.getContent(),其中規定在其javadoc:

默認情況下返回一個InputStream,如果響應的內容類型爲未知,則返回null。

所以也許你應該檢查getContent()是否返回null,然後再將它傳遞給解碼器。

相關問題