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)