为什么BitmapFactory.decodeStream返回null?

问题描述 投票:2回答:4

[基本上,我正在解析一些带有图像的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中调用该方法,所以这不是问题。

android json bitmap bitmapfactory
4个回答
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
投票

Bitmap.decodeStream()的javadoc指出:

如果输入流为空,或不能用于解码位图,则函数返回null

您正在将URL.getContent()的结果传递给它,该结果在其javadoc中声明:

默认情况下,此方法返回InputStream;如果内容类型为响应未知。

所以也许您应该在将getContent()传递给解码器之前检查它是否返回null。


0
投票

我有同样的问题。

我试图找到解码失败的原因。。但是我找不到。我刚刚确认InputStreamBufferedInputStream不为空。

<< [重新启动我的AVD后..即使我没有更改任何代码,问题也已解决。

© www.soinside.com 2019 - 2024. All rights reserved.