android获取网络图片的用法

关于 android获取网络图片主要是把网络图片的数据流读入到内存中然后用
1.Bitmap bitMap = BitmapFactory.decodeByteArray(data, 0, length);  
方法来将图片流传化为bitmap类型 这样才能用到
1.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();   
    }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值