在android sdk 1.6版本API帮助文档中,其中关于BitmapFactory.decodeFactory.decodeStream(InputStream is)的帮助文档是这么说明的:

Bitmap android.graphics.BitmapFactory.decodeStream(InputStream is)public static Bitmap decodeStream (InputStream is)
Since: API Level 1
Decode an input stream into a bitmap. <strong>If the input stream is null, or cannot be used to decode a bitmap, the function returns null</strong>. The stream's position will be where ever it was after the encoded data was read.Parameters
is  The input stream that holds the raw data to be decoded into a bitmap. Returns
The decoded bitmap, or null if the image data could not be decoded. 

public static Bitmap bmpFromURL(URL imageURL){Bitmap result = null;try {HttpURLConnection connection = (HttpURLConnection)imageURL .openConnection();connection.setDoInput(true);connection.connect();InputStream input = connection.getInputStream();result = BitmapFactory.decodeStream(input);} catch (IOException e) {e.printStackTrace();}return result;
}

后来调试发现,result为null,加之查看帮助文档中的黑体字,
所以在所获得的InputStream不为空的情况下,调用BitmapFactory.decodeStream(is)方法,他也有可能无法解码成bitmap,刚开始我怀疑是本身图片地址有问题,或图片自身格式不正确,但通过浏览器查看,图片显示正常,而且,我是保存了几十张图片,但每次都会有个别几张图片无法正常显示,需要重复下载三四次,才可能保存成功。

后来在一篇文章中才发现,原来这是android 1.6版本的一个bug!

有牛人提出的一个解决办法,我试了试,问题解决了

首先在原方法中改一句:

result = BitmapFactory.decodeStream(new PatchInputStream(input));

再创建一个类:

public class PatchInputStream extends FilterInputStream{protected PatchInputStream(InputStream in) {super(in);// TODO Auto-generated constructor stub
        }public long skip(long n)throws IOException{long m=0l;while(m<n){long _m=in.skip(n-m);if(_m==0l){break;}m+=_m;}return m;}}

第二种方法:最终用的是这种方法

InputStream is = httpConn.getInputStream();

if (is == null){
       throw new RuntimeException("stream is null");
  }else{
       try {
           byte[] data=readStream(is);
           if(data!=null){
           bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
       }
  } catch (Exception e) {
       e.printStackTrace();
  }
   is.close();
  }

    /** 得到图片字节流 数组大小* */public static byte[] readStream(InputStream inStream) throws Exception{      ByteArrayOutputStream outStream = new ByteArrayOutputStream();      byte[] buffer = new byte[1024];      int len = 0;      while( (len=inStream.read(buffer)) != -1){      outStream.write(buffer, 0, len);      }      outStream.close();      inStream.close();      return outStream.toByteArray();      }

转载于:https://www.cnblogs.com/0616--ataozhijia/p/3946659.html

[Android Pro] 关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法...相关推荐

  1. 关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法

    转自:http://blog.csdn.net/andypan1314/article/details/6670320 [java] view plaincopy 在android sdk 1.6版本 ...

  2. Android 软键盘弹出时把布局顶上去,控件乱套解决方法

    Android 软键盘弹出时把布局顶上去,控件乱套解决方法 参考文章: (1)Android 软键盘弹出时把布局顶上去,控件乱套解决方法 (2)https://www.cnblogs.com/zhuj ...

  3. Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法

    Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法 今天修改一个比较奇怪的bug: 在操作一个事件的时候,使用eventbus来监听事件,断点发现有时候是会执 ...

  4. android ellipsize 多行,android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法...

    android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法 布局文件中的TextView属性 复制代码 代码如下: android:id="@+id/b ...

  5. C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法

    C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法 参考文章: (1)C# 加载图片image --(C#)Image.FromFile 方法会锁 ...

  6. JPA-save()方法会将字段更新为null的解决方法

    JPA-save()方法会将字段更新为null的解决方法 参考文章: (1)JPA-save()方法会将字段更新为null的解决方法 (2)https://www.cnblogs.com/qingmu ...

  7. 台式计算机无法开机原因,台式电脑无法启动的原因和解决方法_电脑不能启动的原因与解决方法...

    电脑开不了机是一件很让人头疼的事情,相信许多人都遇到过这样的情况,而很多朋友却不知道如何解决此问题,其实电脑无法启动的原因多种多样,弄明白问题是由硬件还是软件引起有助于解决问题.那么台式电脑无法启动的 ...

  8. win7 打印机状态正常无法打印的解决方法(更新补丁后打印机无法打印的解决方法)

    win7 打印机状态正常无法打印的解决方法(更新补丁后打印机无法打印的解决方法): 经过测试 打印机是日常办公过程中非常重要的设备.有些win7旗舰版用户在Windows Update更新补丁后,发现 ...

  9. HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法

    HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法 参考文章: (1)HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法 (2)https://www.cnblogs. ...

  10. android bitmap oom 最新处理办法,【移动开发】Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法...

    当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以androi ...

最新文章

  1. POJ-1430 Binary Stirling Numbers 组合数学
  2. linux 搭建dns
  3. 一个有趣的观察:关于内向和外向
  4. PyTorch 官方教程发布,限时免费开放!
  5. Node.js 的http.serverRequest 或http.IncomingMessage
  6. Bigpipe---FaceBook使用的页面加载技术
  7. ssl1222-矩形【图论,并查集】
  8. 计算机应用技术一级考试成绩,《计算机应用基础》课程与等级考试成绩的关系...
  9. ArrayList的使用方法【转载】
  10. 云+X案例展 | 传播类:南方报业数据中台建设,助力“智媒”飞跃发展
  11. typora 分割线_实战 | 五分钟,使用Typora+PicGo提升百倍写作效率
  12. RTT时钟管理篇——阻塞延时和时基更新函数
  13. STM32中assert_param的使用
  14. 130242014062-黄凌逸-电商系统某功能模块“需求分析与设计实验课小结
  15. linux mysql 数据恢复_怎样恢复Mysql数据库误删除后的数据
  16. ectouch之文件结构
  17. 两个音轨合并_怎么合并音频文件 两个音频合并成一个
  18. Android页面的跳转
  19. 计算机开模拟器,iOS在同一台电脑上打开多个模拟器
  20. facebook 分享页面_如何建立Facebook页面

热门文章

  1. MapXtreme2005中关于使用动画图层的一个方法
  2. Linux系统下多版本gcc使用问题记录
  3. FwmarkServer 实现以及功能分析
  4. Linux内核部件分析 设备驱动模型的基石kobject
  5. 用qt的qml写的安卓摄像头程序
  6. springmvc上传图片后显示损毁或不能显示_猿蜕变系列7——也说说springMVC上传姿势...
  7. 面向对象7:package、MVC设计模式、import
  8. 判断一个数是否为质数
  9. 用java写一些有趣的特效_[Java教程]用JavaScript模拟Flash效果写的炫光波动特效
  10. xcode mysql库_Mac+MySQL+Xcode数据库配置