Android之网络图片加载的5种基本方式

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

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


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

效果如下图:


         


HttpURLConnection方式:

[java] view plain copy
print ?
  1. public Bitmap getImageBitmap(String url) {  
  2.         URL imgUrl = ;  
  3.         Bitmap bitmap = ;  
  4.         try {  
  5.             imgUrl = new URL(url);  
  6.             HttpURLConnection conn = (HttpURLConnection) imgUrl  
  7.                     .openConnection();  
  8.             conn.setDoInput(true);  
  9.             conn.connect();  
  10.             InputStream is = conn.getInputStream();  
  11.             bitmap = BitmapFactory.decodeStream(is);  
  12.             is.close();  
  13.         } catch (MalformedURLException e) {  
  14.             // TODO Auto-generated catch block  
  15.             e.printStackTrace();  
  16.         } catch (IOException e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.         return bitmap;  
  20. }  
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方式

[java] view plain copy
print ?
  1. public Bitmap getImageBitmap(String url) {  
  2.         DefaultHttpClient httpclient = new DefaultHttpClient();  
  3.         HttpGet httpget = new HttpGet(url);  
  4.         try {  
  5.             HttpResponse resp = httpclient.execute(httpget);  
  6.             // 判断是否正确执行  
  7.             if (HttpStatus.SC_OK == resp.getStatusLine().getStatusCode()) {  
  8.                 // 将返回内容转换为bitmap  
  9.                 HttpEntity entity = resp.getEntity();  
  10.                 InputStream in = entity.getContent();  
  11.                 Bitmap mBitmap = BitmapFactory.decodeStream(in);  
  12.                 // 向handler发送消息,执行显示图片操作  
  13.                 return mBitmap;  
  14.             }  
  15.   
  16.         } catch (Exception e) {  
  17.         } finally {  
  18.             httpclient.getConnectionManager().shutdown();  
  19.         }  
  20.   
  21.         return ;  
  22. }  
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方式

[java] view plain copy
print ?
  1. private void initView() {  
  2.     // TODO Auto-generated method stub  
  3.     BitmapUtils bitmapUtils = new BitmapUtils(this);  
  4.     // 加载网络图片  
  5.     bitmapUtils.display(imageView,  
  6.             ”https://img-my.csdn.net/uploads/201407/26/1406383290_9329.jpg”);  
  7.   
  8.     // 加载本地图片(路径以/开头, 绝对路径)  
  9.     // bitmapUtils.display(imageView, ”/sdcard/test.jpg”);  
  10.   
  11.     // 加载assets中的图片(路径以assets开头)  
  12.     // bitmapUtils.display(imageView, “assets/img/wallpaper.jpg”);  
  13.   
  14.   }  
private void initView() {
    // TODO Auto-generated method stub
    BitmapUtils bitmapUtils = new BitmapUtils(this);
    // 加载网络图片
    bitmapUtils.display(imageView,
            "https://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方式

[java] view plain copy
print ?
  1. private void setIamge()  
  2.   {  
  3.     String url = ”https://img-my.csdn.net/uploads/201407/26/1406383291_8239.jpg”;  
  4.     OkHttpUtils.get().url(url).tag(this)  
  5.             .build()  
  6.             .connTimeOut(20000).readTimeOut(20000).writeTimeOut(20000)  
  7.             .execute(new BitmapCallback() {  
  8.             @Override  
  9.             public void onError(Call call, Exception e, int id) {  
  10.                 }  
  11.   
  12.             @Override  
  13.             public void onResponse(Bitmap bitmap, int id) {  
  14.                     imageView.setImageBitmap(bitmap);  
  15.                 }  
  16.             });  
  17.   }  
  private void setIamge()
    {
        String url = "https://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方式

[java] view plain copy
print ?
  1. /*** 
  2.  * ImageRequest加载图片 
  3.  */  
  4. public void setImg1()  
  5. {  
  6.       
  7.       
  8. ImageRequest request = new ImageRequest(VolleySingleton.imageThumbUrls[0],  
  9.      new Response.Listener() {  
  10.      @Override  
  11.      public void onResponse(Bitmap bitmap) {  
  12.             imageview1.setImageBitmap(bitmap);  
  13.            }  
  14.      }, 00, Config.RGB_565,  
  15.      new Response.ErrorListener() {  
  16.          public void onErrorResponse(VolleyError error) {  
  17.             imageview1.setImageResource(R.mipmap.ic_launcher);  
  18.           }  
  19. });  
  20.      VolleySingleton.getVolleySingleton(this.getApplicationContext()).addToRequestQueue(request);  
  21. }  
  22. /*** 
  23.  * 使用 ImageLoader 加载图片 
  24.  */  
  25.   
  26. public void setImg2()  
  27. {  
  28.     com.android.volley.toolbox.ImageLoader mImageLoader;  
  29.     mImageLoader =   VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();  
  30.     mImageLoader.get(VolleySingleton.imageThumbUrls[1],   
  31.             //mImageView是ImageView实例  
  32.             //第2个参数:默认图片  
  33.             //第2个参数:加载图片错误时的图片  
  34.     com.android.volley.toolbox.ImageLoader.getImageListener(imageview2,R.mipmap.ic_launcher, R.mipmap.ic_launcher));  
  35. }  
  36. /** 
  37.  * 使用NetworkImageView加载图片 
  38.  */  
  39. public void setImg3()  
  40. {  
  41.     com.android.volley.toolbox.ImageLoader mImageLoader;  
  42.     mImageLoader = VolleySingleton.getVolleySingleton(this.getApplicationContext()).getImageLoader();  
  43.     networkImageView.setImageUrl(VolleySingleton.imageThumbUrls[2], mImageLoader);  
  44. }  
 /***
     * ImageRequest加载图片
     */
 public void setImg1()
 {


    ImageRequest request = new ImageRequest(VolleySingleton.imageThumbUrls[0],
         new Response.Listener() {
         @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





            

你可能感兴趣的:(Android之网络图片加载的5种基本方式)