关于android获取网络图片主要是吧网络图片的数据流读入到内存中然后用
Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);

方法来将图片流传化为bitmap类型 这样才能用到
imageView.setImageBitmap(bitMap);

来进行转化,这些大家都了解,主要的问题在获取bitmap时候居然为null 怎么回事呢?我开始的时候遇见这个问题,并且困扰了一段时间,最后发现错误了
下面是我的错误代码
     byte[] data = GetImageForNet.getImage(path);     int length = data.length;         Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);     imageView.setImageBitmap(bitMap);

下面是 GetImageForNet.getImage()方法的代码清单
public static byte[] getImage(String path) throws Exception {URL url = new URL(path);HttpURLConnection httpURLconnection =  (HttpURLConnection)url.openConnection();httpURLconnection.setRequestMethod("GET");httpURLconnection.setReadTimeout(6*1000);InputStream in = null;byte[] b = new byte[1024];int len = -1;if (httpURLconnection.getResponseCode() == 200) { in = httpURLconnection.getInputStream(); in.read(b);                         in.close();                         return b;                          }return null;}

看起来没有问题 获取网络图片输入流,填充二进制数组,返回二进制数组,然后使用 Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length); data就是返回的二进制数组
获取bitMap 看起来没有问题,可是bitMap就是为null!汗!最后慢慢整理思路,排除法去查找出现异常的地方,最后发现可能BitmapFactory.decodeByteArray方法中所需要的data不一定是传统意义上的字节数组,查看android api,最后发现BitmapFactory.decodeByteArray所需要的data字节数组并不是想象中的数组!而是把输入流传化为字节内存输出流的字节数组格式,找到原因后改进一下,成功!附上成功后的代码
  try {    byte[] data = GetImageForNet.getImage(path);    String d = new String(data);   // File file = new File("1.jpg");    //OutputStream out = new FileOutputStream(file);    //out.write(data);    //out.close();    int length = data.length;    Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);    imageView.setImageBitmap(bitMap);    //imageView.seti} catch (Exception e) {Log.i(TAG, e.toString());Toast.makeText(DataActivity.this, "获取图片失败", 1).show();}

下面是改进后的 GetImageForNet.getImage()方法的代码清单
public static byte[] getImage(String path) throws Exception {URL url = new URL(path);HttpURLConnection httpURLconnection =  (HttpURLConnection)url.openConnection();httpURLconnection.setRequestMethod("GET");httpURLconnection.setReadTimeout(6*1000);InputStream in = null;byte[] b = new byte[1024];int len = -1;if (httpURLconnection.getResponseCode() == 200) { in = httpURLconnection.getInputStream(); byte[] result = readStream(in); in.close(); return result; }return null;}public static byte[] readStream(InputStream in) throws Exception{ByteArrayOutputStream outputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len = in.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}outputStream.close();in.close();return outputStream.toByteArray();}

更多相关文章

  1. 箭头函数的基础使用
  2. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  3. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  4. android 获取唯一标识
  5. android拍照与读取相册
  6. Android(安卓)热点开关状态的判断和获取热点ssid
  7. Android软键盘适配问题
  8. AIR Native Extension的使用(Android)一 : 打包ane
  9. android之BitMap

随机推荐

  1. 关于php5.*后的时区问题 date_default_ti
  2. 使用没有实体类的本机SQL查询
  3. 如果作者是Post的作者那么做点什么?
  4. 数据库是存储我的Web应用程序数据的最佳
  5. How can clear screen in php cli (like
  6. PHP / MySQL - 有时会将空白条目添加到
  7. Laravel手把手系列教程之一环安装和环境
  8. php和django位于同一个lighttpd服务器上
  9. 如何加载json文件?
  10. 将node.js服务器更改为Apache服务器