[Android Pro] 关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法...
在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对象的解决方法...相关推荐
- 关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法
转自:http://blog.csdn.net/andypan1314/article/details/6670320 [java] view plaincopy 在android sdk 1.6版本 ...
- Android 软键盘弹出时把布局顶上去,控件乱套解决方法
Android 软键盘弹出时把布局顶上去,控件乱套解决方法 参考文章: (1)Android 软键盘弹出时把布局顶上去,控件乱套解决方法 (2)https://www.cnblogs.com/zhuj ...
- Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法
Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法 今天修改一个比较奇怪的bug: 在操作一个事件的时候,使用eventbus来监听事件,断点发现有时候是会执 ...
- android ellipsize 多行,android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法...
android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法 布局文件中的TextView属性 复制代码 代码如下: android:id="@+id/b ...
- C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法
C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法 参考文章: (1)C# 加载图片image --(C#)Image.FromFile 方法会锁 ...
- JPA-save()方法会将字段更新为null的解决方法
JPA-save()方法会将字段更新为null的解决方法 参考文章: (1)JPA-save()方法会将字段更新为null的解决方法 (2)https://www.cnblogs.com/qingmu ...
- 台式计算机无法开机原因,台式电脑无法启动的原因和解决方法_电脑不能启动的原因与解决方法...
电脑开不了机是一件很让人头疼的事情,相信许多人都遇到过这样的情况,而很多朋友却不知道如何解决此问题,其实电脑无法启动的原因多种多样,弄明白问题是由硬件还是软件引起有助于解决问题.那么台式电脑无法启动的 ...
- win7 打印机状态正常无法打印的解决方法(更新补丁后打印机无法打印的解决方法)
win7 打印机状态正常无法打印的解决方法(更新补丁后打印机无法打印的解决方法): 经过测试 打印机是日常办公过程中非常重要的设备.有些win7旗舰版用户在Windows Update更新补丁后,发现 ...
- HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法
HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法 参考文章: (1)HTC Vive使用WebVR的方法以及启用后头显无画面的解决方法 (2)https://www.cnblogs. ...
- android bitmap oom 最新处理办法,【移动开发】Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法...
当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以androi ...
最新文章
- POJ-1430 Binary Stirling Numbers 组合数学
- linux 搭建dns
- 一个有趣的观察:关于内向和外向
- PyTorch 官方教程发布,限时免费开放!
- Node.js 的http.serverRequest 或http.IncomingMessage
- Bigpipe---FaceBook使用的页面加载技术
- ssl1222-矩形【图论,并查集】
- 计算机应用技术一级考试成绩,《计算机应用基础》课程与等级考试成绩的关系...
- ArrayList的使用方法【转载】
- 云+X案例展 | 传播类:南方报业数据中台建设,助力“智媒”飞跃发展
- typora 分割线_实战 | 五分钟,使用Typora+PicGo提升百倍写作效率
- RTT时钟管理篇——阻塞延时和时基更新函数
- STM32中assert_param的使用
- 130242014062-黄凌逸-电商系统某功能模块“需求分析与设计实验课小结
- linux mysql 数据恢复_怎样恢复Mysql数据库误删除后的数据
- ectouch之文件结构
- 两个音轨合并_怎么合并音频文件 两个音频合并成一个
- Android页面的跳转
- 计算机开模拟器,iOS在同一台电脑上打开多个模拟器
- facebook 分享页面_如何建立Facebook页面
热门文章
- MapXtreme2005中关于使用动画图层的一个方法
- Linux系统下多版本gcc使用问题记录
- FwmarkServer 实现以及功能分析
- Linux内核部件分析 设备驱动模型的基石kobject
- 用qt的qml写的安卓摄像头程序
- springmvc上传图片后显示损毁或不能显示_猿蜕变系列7——也说说springMVC上传姿势...
- 面向对象7:package、MVC设计模式、import
- 判断一个数是否为质数
- 用java写一些有趣的特效_[Java教程]用JavaScript模拟Flash效果写的炫光波动特效
- xcode mysql库_Mac+MySQL+Xcode数据库配置