您的位置:首页 > 移动开发 > Android开发

android BitmapFactory.decodeByteArray()=null

2013-06-05 13:51 357 查看
String urlString = "http://10.11.0.121:8914/ElectronicMagazine/TemporaryFile/218.jpg";
URL url = new URL(urlString);
URLConnection connection = url.openConnection();

InputStream is = connection.getInputStream();

BufferedInputStream bis = new BufferedInputStream(is);
bmp = BitmapFactory.decodeStream(bis);
bis.close();

上面是我的程序源码

在今天上午遇到一个比较灵异的问题(通常我认为在程序中不该出现的问题,或检查几遍代码没问题的情况下出现的问题称灵异问题)

在第一个Acvitity中有一个button。点击这个Button跳转到第二个Activity中并从网络下载图片填充到ImageView中,第一次点击跳转后图片成功填充至ImageIVew。返回再次点击的时候无效,第三次点击的时候又正常,继续点击又无效。这个问题让我很苦恼

我认为可能是缓存的问题,测试缓存,在Activity onStop()的时候给个一个this.finsh();结束当前Activity。程序再次跑起来,问题依然在。

在仔细检查代码后发现可能是输入流并未关闭的问题,发现这个问题后很惊喜,以为关一下流就可以解决了这个困扰了半天的问题了,于是关闭后再次运行。我去,灵异这哥们还呆在原地。

做了一个小Demo测试了一下,点按钮跳到另外一个页面并下载图片填充ImageView。在Demo中百试百灵,这让我很是郁闷,Demo中可以,为什么在我的程序中不行呢。

没办法了再次调试呗,这一调出现在了一个很大的问题BitmapFactory.decodeByteArray()返回值竟然为null。我说怎么Bitmap没东西呢

第四步,在网上百度,最后/article/1664800.html (catoop)这哥们也遇到和我同样的问题,还好前辈已有解决方法,大喜,分析了一下他的解决方案,并运用在我的程序中,灵异那哥们感觉玩够了,终于走了,又还我程序一个太平世界。

解决方法

这个android 的一个bug 。在android 2.2 以下(我在测试中发现貌似2.3也不行) 用 BitmapFactory.decodeStream() 这个方法,会出现概率性的解析失败的异常。而在高版本中,eg 2.3 则不会出现这种异常。

//定义一个根据图片url获取InputStream的方法
public static byte[] getBytes(InputStream is) throws IOException {
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; // 用数据装
int len = -1;
while ((len = is.read(buffer)) != -1) {
outstream.write(buffer, 0, len);
}
outstream.close();
// 关闭流一定要记得。
return outstream.toByteArray();
}

//然后使用方法decodeByteArray()方法解析编码,生成Bitmap对象。
byte[] data = getBytesFromInputStream(new URL(imgUrl).openStream());
Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: