zoukankan      html  css  js  c++  java
  • Android 下载网络图片注意的问题

    在使用的过程中,如果网络比较慢的话,则会出现下载不成功的问题。经过google搜索,终于解决了这个问题。

      一般我们会用以下的代码:

    java代码:
    //获取connection,方法略
    conn = getURLConnection(url);
    is = conn.getInputStream();

    //获取Bitmap的引用
    Bitmap bitmap = BitmapFactory.decodeStream(is)


           但是网络不好的时候获取不了图片,推荐使用以下的方法:

    java代码:
    //获取长度
    int length = (int) conn.getContentLength();
    if (length != -1) {
    byte[] imgData = new byte[length];
    byte[] temp=new byte[512];
    int readLen=0;
    int destPos=0;

    while((readLen=is.read(temp))>0){
    System.arraycopy(temp, 0, imgData, destPos, readLen);
    destPos+=readLen;
    }

    bitmap=BitmapFactory.decodeByteArray(imgData, 0, imgData.length);
    }


            使用上面的方法的好处是在网速不好的情况下也会将图片数据全部下载,然后在进行解码,生成图片对象的引用,所以可以保证只要图片存在都可以下载下来。当然在读取图片数据的时候也可用java.nio.ByteBuffer,这样在读取数据前就不用知道图片数据的长度也就是图片的大小了,避免了有时候 http获取的length不准确,并且不用做数组的copy工作。

    java代码:
    public synchronized Bitmap getBitMap(Context c, String url) {
    URL myFileUrl = null;
    Bitmap bitmap = null;
    try {

    myFileUrl = new URL(url);
    } catch (MalformedURLException e) {
    bitmap = BitmapFactory.decodeResource(c.getResources(),
    com.jixuzou.moko.R.drawable.defaultimg);
    return bitmap;
    }

    try {
    HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
    conn.setDoInput(true);
    conn.connect();
    InputStream is = conn.getInputStream();
    int length = (int) conn.getContentLength();
    if (length != -1) {
    byte[] imgData = new byte[length];
    byte[] temp = new byte[512];
    int readLen = 0;
    int destPos = 0;
    while ((readLen = is.read(temp)) > 0) {
    System.arraycopy(temp, 0, imgData, destPos, readLen);
    destPos += readLen;
    }
    bitmap = BitmapFactory.decodeByteArray(imgData, 0,imgData.length);
    }
    } catch (IOException e) {
    bitmap = BitmapFactory.decodeResource(c.getResources(),com.jixuzou.moko.R.drawable.defaultimg);
    return bitmap;
    }
    return bitmap;
    }

  • 相关阅读:
    Zookeeper ZAB 协议分析
    Docker技术快速精通指南
    Oracle闪回技术详解
    怎样打造一个分布式数据库
    使用js冒泡实现点击空白处关闭弹窗
    也谈谈我对Docker的简单理解
    Docker技术快速精通指南
    Oracle优化网上常见的5个错误观点
    使用Spring AOP实现MySQL读写分离
    RESTEASY ,从学会使用到了解原理。
  • 原文地址:https://www.cnblogs.com/xxz526/p/3683229.html
Copyright © 2011-2022 走看看