zoukankan      html  css  js  c++  java
  • Android之网络图片加载的5种基本方式

    学了这么久,最近有空把自己用到过的网络加载图片的方式总结了出来,与大家共享,希望对你们有帮助。

    此博客包含Android 5种基本的加载网络图片方式,包括普通加载HttpURLConnection、HttpClients、Volley、XUtils、OkHttp等网络加载图片。

    其他网络图片加载方式,后续补上。

    效果如下图:

                  

    HttpURLConnection方式:

    public Bitmap getImageBitmap(String url) {
            URL imgUrl = null;
            Bitmap bitmap = null;
            try {
                imgUrl = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) imgUrl
                        .openConnection();
                conn.setDoInput(true);
                conn.connect();
                InputStream is = conn.getInputStream();
                bitmap = BitmapFactory.decodeStream(is);
                is.close();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bitmap;
    }

    HttpClient方式

    public Bitmap getImageBitmap(String url) {
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(url);
            try {
                HttpResponse resp = httpclient.execute(httpget);
                // 判断是否正确执行
                if (HttpStatus.SC_OK == resp.getStatusLine().getStatusCode()) {
                    // 将返回内容转换为bitmap
                    HttpEntity entity = resp.getEntity();
                    InputStream in = entity.getContent();
                    Bitmap mBitmap = BitmapFactory.decodeStream(in);
                    // 向handler发送消息,执行显示图片操作
                    return mBitmap;
                }
    
            } catch (Exception e) {
            } finally {
                httpclient.getConnectionManager().shutdown();
            }
    
            return null;
    }

     XUtils方式

    private void initView() {
        // TODO Auto-generated method stub
        BitmapUtils bitmapUtils = new BitmapUtils(this);
        // 加载网络图片
        bitmapUtils.display(imageView,
                "http://img.my.csdn.net/uploads/201407/26/1406383290_9329.jpg");
    
        // 加载本地图片(路径以/开头, 绝对路径)
        // bitmapUtils.display(imageView, "/sdcard/test.jpg");
    
        // 加载assets中的图片(路径以assets开头)
        // bitmapUtils.display(imageView, "assets/img/wallpaper.jpg");
    
      }

    OkHttp方式

      private void setIamge()
        {
            String url = "http://img.my.csdn.net/uploads/201407/26/1406383291_8239.jpg";
            OkHttpUtils.get().url(url).tag(this)
                    .build()
                    .connTimeOut(20000).readTimeOut(20000).writeTimeOut(20000)
                    .execute(new BitmapCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        }
    
                    @Override
                    public void onResponse(Bitmap bitmap, int id) {
                            imageView.setImageBitmap(bitmap);
                        }
                    });
        }

    Volley方式

     /***
         * ImageRequest加载图片
         */
     public void setImg1()
     {
            
            
        ImageRequest request = new ImageRequest(VolleySingleton.imageThumbUrls[0],
             new Response.Listener<Bitmap>() {
             @Override
             public void onResponse(Bitmap bitmap) {
                    imageview1.setImageBitmap(bitmap);
                   }
             }, 0, 0, Config.RGB_565,
             new Response.ErrorListener() {
                 public void onErrorResponse(VolleyError error) {
                    imageview1.setImageResource(R.mipmap.ic_launcher);
                  }
        });
          VolleySingleton.getVolleySingleton(this.getApplicationContext()).addToRequestQueue(request);
        }
        /***
         * 使用 ImageLoader 加载图片
         */
        
        public void setImg2()
        {
            com.android.volley.toolbox.ImageLoader mImageLoader;
            mImageLoader =   VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
            mImageLoader.get(VolleySingleton.imageThumbUrls[1], 
                    //mImageView是ImageView实例
                    //第2个参数:默认图片
                    //第2个参数:加载图片错误时的图片
            com.android.volley.toolbox.ImageLoader.getImageListener(imageview2,R.mipmap.ic_launcher, R.mipmap.ic_launcher));
        }
        /**
         * 使用NetworkImageView加载图片
         */
        public void setImg3()
        {
            com.android.volley.toolbox.ImageLoader mImageLoader;
            mImageLoader = VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();
            networkImageView.setImageUrl(VolleySingleton.imageThumbUrls[2], mImageLoader);
        }

    相关Jar下载: Volley.Jar  XUtils.Jar   httpclient-4.3.5.jar   okhttp.jar

    结语:

           这五种网络图片加载是基本的,了解会使用就行了;

           其他网络图片加载方式,请看

    Android之网络图片框架UniversalImageLoader和结合LruCache缓存图片

    Android图片加载框架之Picasso非常好的图片加载缓存库

    Android之Fresco(facebook的强大Android图片加载的框架)

    Android之Glide(非常好用的图片加载框架)

                

    源码点击下载 https://github.com/DickyQie/android-load-picture/tree/imageloading

     

  • 相关阅读:
    代码题(22)— 二叉树镜像、相同的树 、对称二叉树
    代码题(26)— 不同路径
    代码题(25)— 最大子序和、最长上升子序列
    Linux 基本命令总结
    C++(五)— 控制保留小数位数
    C++(四)— 字符串、数字翻转3种方法
    代码题(24)— 寻找重复数、数组中重复的数据、找到所有数组中消失的数字
    代码题(23)— 数组中的最长山脉
    【vue】vue +element 搭建项目,将js函数变成vue的函数
    【vue】vue +element 搭建项目,$createElement使用
  • 原文地址:https://www.cnblogs.com/zhangqie/p/6481768.html
Copyright © 2011-2022 走看看