【问题标题】:Why is BitmapFactory.decodeStream returning null?为什么 BitmapFactory.decodeStream 返回 null?
【发布时间】:2015-02-25 23:34:00
【问题描述】:

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

【问题讨论】:

  • 你的应用有什么样的权限?另外:包括你的 logcat,以防万一那里有东西......
  • 我建议使用几十个库中的任何一个来加载图像,而不是尝试在URL 上使用getContent()。您更有可能获得更多可以帮助您隔离问题的日志信息,并且它们通常可以处理异步填充ImageView。以Picasso 为例。
  • @DigCamara 我的清单中已经包含 Internet 权限,因为它正在从网站加载其他数据。当我回到家时,我会尝试包含我的 logcat 信息。
  • @CommonsWare 感谢您的帮助。你认为我应该有另一个线程吗?我已经有一个 AsyncTask 来填充我的列表视图等。但我会研究毕加索。
  • 为什么这个问题有+2?检查 LOGCAT 的日志。我很确定您那里有“获取图像时出错”...编辑 +3...您有一些 sockpupet 帐户吗?

标签: android json bitmap bitmapfactory


【解决方案1】:

Bitmap.decodeStream() 的 javadoc 声明:

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

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

默认情况下返回一个 InputStream,如果内容类型为 null 响应未知。

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

【讨论】:

    【解决方案2】:

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

    例如。

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

    【讨论】:

      【解决方案3】:

      您能否检查一下这是否适合您:

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

      另外提醒您将其添加到您的清单中

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

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。

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

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

        【讨论】:

        • 同样的错误再次发生..但重新启动我的 AVD 是..现在不工作..
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        • 2011-08-21
        • 2011-01-31
        • 1970-01-01
        • 2022-12-26
        • 1970-01-01
        相关资源
        最近更新 更多