博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法
阅读量:5137 次
发布时间:2019-06-13

本文共 2726 字,大约阅读时间需要 9 分钟。

在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. If the input stream is null, or cannot be used to decode a bitmap, the function returns null. 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,刚开始我怀疑是本身图片地址有问题,或图片自身格式不正确,但通过浏览器查看,图片显示正常,而且,我是保存了几十张图片,但每次都会有个别几张图片无法正常显示,需要重复下载三四次,才可能保存成功。

后来在一篇文章中才发现,原来这是 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

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

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/zhujiabin/p/5566146.html

你可能感兴趣的文章
ASP导出数据到excel遇到的一些问题
查看>>
pdf文件之itextpdf插入html内容以及中文解决方案
查看>>
恭送功臣
查看>>
CSS清除浮动
查看>>
犯罪都市
查看>>
Android ViewPager再探:增加滑动指示条
查看>>
angualr路由守卫
查看>>
分布式锁-多种实现方式
查看>>
delphi 安卓配置教程
查看>>
Spring基础
查看>>
DBDocumentGenerator使用
查看>>
boost c++框架的用户体验
查看>>
[LeetCode] 133. Clone Graph 克隆无向图
查看>>
关于博客园首页
查看>>
遍历数据并插入页面的几种方式
查看>>
MYSQL 简单的建库操作代码
查看>>
制作listView高效率万能适配器
查看>>
关于递归的初级理解
查看>>
[置顶] Servlet入门---张国亮--->总结心德第二季
查看>>
JSp动作指令
查看>>