volley框架再識

Volley是一個HTTP庫,它使得在Android應用上訪問網絡更簡單,更重要的是,更快。

Volley提供了一下的便利:

       自動的網絡請求調度。
      多併發網絡連接。
       設置緩存,清除緩存
      你可以取消單個請求,或者取消一些請求。
     強大的排序功能,使的從網絡異步獲取數據並正確填入UI變得容易。

Volley不適合繁重的下載或者流的操作,因爲Volley會把解析到的響應數據保持在內存中。


先看一段下載網絡圖片的代碼


public class MainActivity extends Activity {
	  String imageUrl = "http://zxpic.gtimg.com/infonew/0/wechat_pics_-6472427.jpg/640";   
	  ImageView imView;
	  ImageListener imagelistener;
	  ImageLoader imageloaader;
	  RequestQueue mQueue;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);		
		imView=(ImageView) findViewById(R.id.tests);
		//通過Volley的靜態方法new一個請求隊列,再調用請求隊列(RequestQueue是由緩存和網絡線程構造的)的start方法。
		mQueue=Volley.newRequestQueue(this);
		
		//第一個參數是存放下載圖片資源的對象imview,第二個是默認的圖片的資源ID,第三張是資源請求錯誤是給的圖片資源ID
		imagelistener=ImageLoader.getImageListener(imView,
					R.drawable.ic_launcher,
					R.drawable.ic_launcher);
		 //第一個參數是The RequestQueue to use for making image requests.
		//第二個參數是設置緩存的類
		   imageloaader= new ImageLoader(mQueue, new BitmapCache());
		   //得到圖片並加載
		   imageloaader.get(imageUrl, imagelistener);
		   mQueue.start();
	}


得到一個RequestQueue請求隊列時,就添加一個請求Request,Volley提供有三種請求的封裝,一個是StringRequest,一個事ImageRequest,還有一個是JsonRequest。
最後,調用RequestQueue的start方法就可以開始一條網絡請求了。
這裏一個最核心的就是RequestQueue請求隊列這個了。
這個請求隊列是有兩個東西完成,一個是cache一個network。
這個RequestQueue的構造形式有四種:除了上面這兩個還有線程池數量,響應委派。
1,public RequestQueue(Cache cache, Network network, int threadPoolSize,ResponseDelivery delivery)
2, public RequestQueue(Cache cache, Network network, int threadPoolSize)
3,public RequestQueue(Cache cache, Network network)


其實Cache和Network真正的工作者還是CacheDispatcher緩存調度和NetworkDispatcher網絡調度。下期再詳細講解Dispatcher。。
RequestQueue的成員方法主要有下面幾個:
 public void start();//請求隊列開始進行調度發vgm
 public void stop();//隊列退出調度
 public Request add(Request request);//添加一個請求,通過調用start()來執行
 void finish(Request request);//這個方法應該是釋放請求資源的方法
 public void cancelAll();//取消當前的請求
1.StringRequest是繼承Request<String> ,對應String的ResponseListener交付請求結果。
 
public StringRequest(int method, String url, Listener<String> listener,ErrorListener errorListener)
2.JsonRequest有JsonObjectRequest和JsonArrayRequest兩個子類,通過parseNetworkResponse(NetworkResponse response)來處理JsonObject和JsonArray兩個不同結果。
3.ImageRequest的構造參數比較多,主要針對圖片的一些處理工作。多了一個限制圖片最大長寬和configOptions圖片類的東西。
public ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight,Config decodeConfig, Response.ErrorListener errorListener)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章