灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:1668回复:0

android获取网络图片的用法

楼主#
更多 发布于:2012-09-06 14:02

关于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();  
    }


摘自 qingli518


喜欢0 评分0
游客

返回顶部