为什么BitmapFactory.decodeStream返回null?

时间:2014-12-29 19:17:06

标签: android json bitmap bitmapfactory

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

4 个答案:

答案 0 :(得分:1)

我曾经遇到过愚蠢的问题,例如在解码之前让我的流程到达终点,所以确保在解码流之前将其设置为0

例如

// Build your URL string
std::string test = decode(foo[5]);
std::string url = test + "filename.txt";

// Use std::string::c_str() to convert from C++ string
// to C raw string pointer const char*
downloadFile(url.c_str(), "/user/tmp/file.txt");

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

Bitmap.decodeStream()的javadoc指出:

  

如果输入流为null,或者无法用于解码位图,则   function返回null

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

  

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

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

答案 3 :(得分:0)

我有同样的问题。

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

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