[基本上,我正在解析一些带有图像的JSON,并尝试将其加载到ImageView中。但是mBitmap返回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
例如
stream.Position = 0;
var bmp = BitmapFactory.DecodeStream(stream);
您能检查一下是否适合您:
InputStream in = new java.net.URL(downloadURL).openStream();
Bitmap avatarBmp = BitmapFactory.decodeStream(in);
in.close();
也提醒您将其添加到清单中
<uses-permission android:name="android.permission.INTERNET" />
Bitmap.decodeStream()的javadoc指出:
如果输入流为空,或不能用于解码位图,则函数返回null
您正在将URL.getContent()的结果传递给它,该结果在其javadoc中声明:
默认情况下,此方法返回InputStream;如果内容类型为响应未知。
所以也许您应该在将getContent()传递给解码器之前检查它是否返回null。
我有同样的问题。
我试图找到解码失败的原因。。但是我找不到。我刚刚确认InputStream
和BufferedInputStream
不为空。
<< [重新启动我的AVD后..即使我没有更改任何代码,问题也已解决。