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;
    }

  • 相关阅读:
    解决SharePoint 文档库itemadded eventhandler导致的上传完成后,编辑页面保持报错的问题,错误信息为“该文档已经被编辑过 the file has been modified by...”
    解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
    随机实例,随机值
    Spring4笔记
    struts2笔记(3)
    struts2笔记(2)
    获取文本的编码类型(from logparse)
    FileUtil(from logparser)
    DateUtil(SimpleDateFormat)
    struts2笔记
  • 原文地址:https://www.cnblogs.com/xxz526/p/3683229.html
Copyright © 2011-2022 走看看