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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM