在android sdk 1.6版本API帮助文档中,其中关于BitmapFactory.decodeFactory.decodeStream(InputStream is)的帮助文档是这么说明的:
1.
2. Bitmap android.graphics.BitmapFactory.decodeStream(InputStream is)
3.
4. public static Bitmap decodeStream (InputStream is)
5. Since: API Level 1
6. < strong > If the input stream is null, or cannot be used to decode a bitmap, the function returns null </ strong >
7.
8. Parameters
9. is The input stream that holds the raw data to be decoded into a bitmap.
10.
11. Returns
12. The decoded bitmap, or null if the image data could not be decoded.
注意黑体字。以下是具体代码:
1. public static
2.
3. null
4.
5. try
6.
7. HttpURLConnection connection = (HttpURLConnection)imageURL .openConnection();
8.
9. true
10.
11. connection.connect();
12.
13. InputStream input = connection.getInputStream();
14.
15. result = BitmapFactory.decodeStream(input);
16.
17.
18. catch
19.
20.
21. e.printStackTrace();
22.
23. }
24.
25. return
26.
27. }
后来调试发现,result为null,加之查看帮助文档中的黑体字,
所以在所获得的InputStream不为空的情况下,调用BitmapFactory.decodeStream(is)方法,他也有可能无法解码成 bitmap,刚开始我怀疑是本身图片地址有问题,或图片自身格式不正确,但通过浏览器查看,图片显示正常,而且,我是保存了几十张图片,但每次都会有个 别几张图片无法正常显示,需要重复下载三四次,才可能保存成功。
后来在一篇文章中才发现,原来这是android 1.6版本的一个bug!
有牛人提出的一个解决办法,我试了试,问题解决了
首先在原方法中改一句:
1. new
再创建一个类:
1. public class PatchInputStream extends
2.
3. protected
4. super
5. // TODO Auto-generated constructor stub
6. }
7.
8. public long skip( long n) throws
9. long
10. while
11. long
12. if
13. break
14. }
15. m+=_m;
16. }
17. return
18. }
19.
20. }
第二种方法:最终用的是这种方法
1. InputStream is = httpConn.getInputStream();
1. if (is == null
2. throw new RuntimeException( "stream is null"
3. else
4. try
5. byte
6. if (data!= null
7. 0
8. }
9. catch
10. e.printStackTrace();
11. }
12.
13. is.close();
14. }
1. /*
2. * 得到图片字节流 数组大小
3. * */
4. public static byte [] readStream(InputStream inStream) throws
5. new
6. byte [] buffer = new byte [ 1024
7. int len = 0
8. while ( (len=inStream.read(buffer)) != - 1
9. 0
10. }
11. outStream.close();
12. inStream.close();
13. return
14. }