********************************************************
volley框架總結,數據量小,適合小數據的傳輸下載,擴展性強,內部是基於大量的接口設計,可配置性強,而且開源,適合配置屬於自己的volley框架,包括請求頭處理,緩存機制的支持,安卓api9以下是用httpclient來實現,9以上使用。volley默認只有磁盤緩存,並且是默認開啓。
1.網絡請求。需要先實例化消息隊列,一般是在application裏實現的,
兩種方式get和post,get請求網絡數據需要三個參數,url,成功的接口回調還有失敗的接口回調,post請求需要聲明一下post的模式(相比get就在三個參數前面多加了這一個參數),並且在匿名內部類裏重寫一個getparams方法,在裏面put相應的參數既可。
StringRequest(Request.Method.POST,url,Listener,ErrorListener){
public Map<String,String> getParams(){
return map;
}
}
然後要給這個request請求,添加到消息隊列中,並且設置tag,用於在程序結束中取消這個請求,
請求數據需要兩個dispatcher分發的方法,一個是CacheDispatcher方法,另一個是NetworkDispatcher,兩個都是線程,不過一個是走緩存一個是走網絡。加載時,會先走緩存。如果未緩存,或者緩存失效以及緩存刷新就會走NetworkDispatcher。最後NetworkDispatcher將數據的結果返回給ResponseDelivery(結果分發接口),
2.圖片加載ImageRequest
* 參數一:url地址
* 參數二:成功的回調監聽
* 參數三四:圖片的最大寬高,這個屬性一般和ScaleType屬性來連用,當設置爲0是表示不縮放
* 參數五:縮放類型
* 參數六:圖片的解碼類型(ARGB8888,ARGB4444,RGB565,ALPHA8)
* 參數七:圖片顯示前的處理(顯示爲圓角的或者圓形圖片)
* 參數八:錯誤或者失敗的回調
ImageRequest imageRequest = new ImageRequest(
url,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
}
},
0,0,
ImageView.ScaleType.CENTER_CROP,
Bitmap.Config.RGB_565,
null,
null
);
如同get和post請求一樣,把這個imageRequest請求添加到最開始實例化的消息隊列中。
3.ImageLoader 相比ImageRequest更加高效,還可以對圖片緩存
//1.實例化ImageLoader
ImageLoader imageLoader = new ImageLoader(requestQueue,imageCache);
//2.加載顯示圖片
ImageListener imageListener = imageLoader.getImageListener(imageView,R.default.icon,R.error.icon);
//可以使用四個參數的方法,自動處理圖片的寬高,能防止內存溢出。
imageLoader.get(url,imageListener);
4.NetworkImageView
一個圖片的控件com.android.volley.NetworkImageView。
在java代碼中綁定該控件後,可以直接該控件點調用相關的屬性。
NetworkImageView
nImageView;
ImageLoader imLoader = new ImageLoader(mQueue, new BitmapLruCache());
nImageView.setDefaultImageResId(R.drawable.ic_launcher); //默認
nImageView.setErrorImageResId(R.drawable.ic_launcher); // 錯誤
nImageView.setImageUrl(url, imLoader);