用volley實現android加載網絡圖片(一)以及感受

本文涉及轉載自郭霖大神的文章

轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/17482165

昨天在做完涉及用volley獲取網頁的json格式數據外,我便開始尋找如何用ImageView加載網絡圖片。查了許多,發現以前加載網絡圖片的方法都不能用了,主要是由於版本的升級,導入數據圖片的獲取不能在主線程中進行。

於是,在我查的時候,發現了郭霖大神的volley篇,裏面涉及到了用imageRequest來加載網絡圖片,這裏,我先只放關於imageRequest的方法。

以下是轉載部分:

在上篇文章中有提到過,Volley是將AsyncHttpClient和Universal-Image-Loader的優點集成於一身的一個框架。我們都知道,Universal-Image-Loader具備非常強大的加載網絡圖片的功能,而使用Volley,我們也可以實現基本類似的效果,並且在性能上也豪不遜色於Universal-Image-Loader,下面我們就來具體學習一下吧。

1. ImageRequest的用法

前面我們已經學習過了StringRequest和JsonRequest的用法,並且總結出了它們的用法都是非常類似的,基本就是進行以下三步操作即可:

1. 創建一個RequestQueue對象。

2. 創建一個Request對象。

3. 將Request對象添加到RequestQueue裏面。

其中,StringRequest和JsonRequest都是繼承自Request的,所以它們的用法纔會如此類似。那麼不用多說,今天我們要學習的ImageRequest,相信你從名字上就已經猜出來了,它也是繼承自Request的,因此它的用法也是基本相同的,首先需要獲取到一個RequestQueue對象,可以調用如下方法獲取到:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. RequestQueue mQueue = Volley.newRequestQueue(context);  
接下來自然要去new出一個ImageRequest對象了,代碼如下所示:
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. ImageRequest imageRequest = new ImageRequest(  
  2.         "http://developer.android.com/images/home/aw_dac.png",  
  3.         new Response.Listener<Bitmap>() {  
  4.             @Override  
  5.             public void onResponse(Bitmap response) {  
  6.                 imageView.setImageBitmap(response);  
  7.             }  
  8.         }, 00, Config.RGB_565, new Response.ErrorListener() {  
  9.             @Override  
  10.             public void onErrorResponse(VolleyError error) {  
  11.                 imageView.setImageResource(R.drawable.default_image);  
  12.             }  
  13.         });  
可以看到,ImageRequest的構造函數接收六個參數,第一個參數就是圖片的URL地址,這個沒什麼需要解釋的。第二個參數是圖片請求成功的回調,這裏我們把返回的Bitmap參數設置到ImageView中。第三第四個參數分別用於指定允許圖片最大的寬度和高度,如果指定的網絡圖片的寬度或高度大於這裏的最大值,則會對圖片進行壓縮,指定成0的話就表示不管圖片有多大,都不會進行壓縮。第五個參數用於指定圖片的顏色屬性,Bitmap.Config下的幾個常量都可以在這裏使用,其中ARGB_8888可以展示最好的顏色屬性,每個圖片像素佔據4個字節的大小,而RGB_565則表示每個圖片像素佔據2個字節大小。第六個參數是圖片請求失敗的回調,這裏我們當請求失敗時在ImageView中顯示一張默認圖片。

最後將這個ImageRequest對象添加到RequestQueue裏就可以了,如下所示:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. mQueue.add(imageRequest);  
現在如果運行一下程序,並嘗試發出這樣一條網絡請求,很快就能看到網絡上的圖片在ImageView中顯示出來了,如下圖所示:

以下是我的感受:在一開始用這個方法的時候覺得特別好用,因爲imageRequest這個方法簡潔方便,好像沒有什麼缺點,但是,事實是,不止是imageRequest,JsonRequest都有這個問題,用這個方法有一個最大的缺陷的就是在你在jsonRequest裏面的賦值的參數,只是一個局部參數,運行好這個東西以後,賦值的參數就會變回初始狀態。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

由於本人是新手,目前正在瞭解原因,等我瞭解了,再發布解決辦法

發佈了23 篇原創文章 · 獲贊 23 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章