为什么 BitmapFactory.decodeStream 返回空值?

3

基本上,我正在解析一些带有图像的JSON,并尝试将其加载到ImageView中。然而,mBitmap返回null。我不知道为什么,进一步的研究也没有帮助。

这是我正在使用的一个示例URL:

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中调用这个方法,所以问题不在这里。


@DigCamara 我的清单中已包含了Internet权限,因为它正在从网站加载其他数据。等我回家后,我会尝试包含我的logcat信息。 - MrTimotheos
@CommonsWare 我很感激您的帮助。您认为我应该再开一个线程吗?我已经有一个AsyncTask在运行,用于填充我的Listviews等内容。但我会研究一下Picasso。 - MrTimotheos
1
为什么这个问题有+2的赞?检查Logcat的日志。我非常确定你那里有“获取图像错误”...编辑+3...你有一些马甲账号吗? - Selvin
我不确定我理解你最后的问题,而且BitMap为空,我确实收到了显示“获取图像错误”的日志,我之前也有一个给出mBitMap值的日志,但我已经将其删除。这样你就更好地理解我的问题了。 - MrTimotheos
你试过这个吗:http://stackoverflow.com/questions/23096962/bitmapfactory-decodestream-not-working? - Hanelore Ianoseck
显示剩余3条评论
4个回答

2
Bitmap.decodeStream()的Javadoc说明如下:
如果输入流为null或无法用于解码位图,则该函数返回null。
您正在将URL.getContent()的结果传递给它,其Javadoc中指出:
默认情况下,这将返回一个InputStream,如果响应的内容类型未知,则返回null。
因此,在传递给解码器之前,您可能应该检查getContent()是否返回null。

1

我过去曾遇到过一些愚蠢的问题,例如在解码流之前已经到达了流的末尾,因此请务必在解码流之前将其位置设置为0。

例如:

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

0

你能检查一下这个对你是否有效吗:

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

还要提醒您在清单文件中添加此内容

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

0

我也遇到了同样的问题。

我试图找到解码失败的原因,但是我找不到。 我只确认了 InputStreamBufferedInputStream 不为 null。

重新启动我的 AVD 之后,即使我没有更改任何代码,问题也得到了解决。


同样的错误又出现了.. 但是重新启动我的 AVD 现在不起作用了.. - mazend

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接