android BitmapFactory.decodeByteArray()=null

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没东西呢

第四步,在网上百度,最后http://blog.csdn.net/catoop/article/details/8470031   (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);






 


 

 

 

 

 

你可能感兴趣的:(android BitmapFactory.decodeByteArray()=null)