compile 'eu.the4thfloor.volley:com.android.volley:2015.05.28'
RequestQueue requestQueue; requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest("", new Response.Listener<String>() { @Override public void onResponse(String response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } });
構造方法:
第一個參數: 請求地址
第二個參數: 請求成功監聽器
第三個參數: 請求失敗
StringRequest(String url, Listener<String> listener, ErrorListener errorListener)(GET請求)
第一個參數: 請求方式
第二個參數: 請求地址
第三個參數: 請求成功監聽器(數據返回就在這裏,不論是正確的仍是錯誤的)
第四個參數: 請求失敗(指網絡失敗,沒有返回數據,網絡中斷等緣由形成的請求失敗)
StringRequest(int method, String url, Listener<String> listener,ErrorListener errorListener)
requestQueue.add(stringRequest);
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { //服務端響應成功,返回數據
Log.d("TAG", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //服務端響應失敗
Log.e("TAG", error.getMessage(), error); } });
1. 建立一個RequestQueue對象。html
2. 建立一個Request對象。android
3. 將Request對象添加到RequestQueue裏面。json
不一樣的只是名稱和構造函數不一樣罷了。數組
(1)ImageRequest 構建對象:緩存
ImageRequest imageRequest = new ImageRequest( "http://developer.android.com/images/home/aw_dac.png", new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { imageView.setImageBitmap(response); } }, 0, 0, Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { imageView.setImageResource(R.drawable.default_image); } });
構造函數爲:
ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight,Config decodeConfig, Response.ErrorListener errorListener)
六個參數:服務器
第一個參數:url 圖片的URL地址網絡
第二個參數: 圖片請求成功的回調ide
第3、第四個參數:指定的網絡圖片的最大寬度和最大高度,若是寬高度與指定不符,則進行壓縮,若是都設置爲0 ,就是不會壓縮函數
第五個參數:指定圖片的顏色屬性工具
第六個參數:圖片請求失敗的回調
(2) 將此對象添加到消息隊列中便可。
(四)ImageLoader
ImageLoader要比ImageRequest更加高效,由於它不只能夠幫咱們對圖片進行緩存,還能夠過濾掉重複的連接,避免重複發送請求;
因爲ImageLoader已經不是繼承自Request的了,因此其用法也和咱們以前學到的內容有所不一樣,總結起來大體能夠分爲如下四步:
1. 建立一個RequestQueue對象。
2. 建立一個ImageLoader對象。
3. 獲取一個ImageListener對象。
4. 調用ImageLoader的get()方法加載網絡上的圖片。
long l = Runtime.getRuntime().totalMemory()/8 ; final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>((int) l) {//此處l是上面獲取的程序當前程序的8分之一
@Override protected int sizeOf(String key, Bitmap value) {//返回每一個緩存的大小
return value.getRowBytes() * value.getHeight() / 1024; } };// 建立系統自帶的緩存,緩存最大值爲內存最大值的1/8
2,新建ImageLoader對象
構造函數:
兩個參數:
第一個參數就是RequestQueue對象
第二個參數是一個ImageCache對象
ImageLoader imageLoader; imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) {//從緩存中獲取圖片,是在 get 方法執行的時候纔來,由於須要 url
LogUitls.e("volley", "獲取緩存圖片"); Bitmap bitmap = lruCache.get(url); return bitmap; } @Override public void putBitmap(String url, Bitmap bitmap) {//往緩存中存放圖片,這裏的URL值是什麼?緩存地址仍是上面的下載地址?
LogUitls.e("volley", "將圖片存放到緩存中"); lruCache.put(url, bitmap); } });
(3)get方法
get方法參數:
第一個參數:圖片的URL地址
第二個參數:ImageListener對象
ImageListener構造函數參數:
第一個參數:要顯示圖片的控件
第二個參數:加載圖片的過程當中顯示的圖片
第三個參數: 加載圖片失敗的狀況下顯示的圖片
imageLoader.get("http://www.baidu.com/img/bd_logo1.png", ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher));
ImageLoader.getImageListener的缺點:僅適合沒有複用控件的時候使用, listview 中使用會致使錯亂,由於沒有判斷返回的圖片
NetworkImageView是一個自定義控制,它是繼承自ImageView的,具有ImageView控件的全部功能,而且在原生的基礎之上加入了加載網絡圖片的功能。
NetworkImageView控件的用法要比前兩種方式更加簡單,大體能夠分爲如下五步:
1. 建立一個RequestQueue對象。
2. 建立一個ImageLoader對象。
3. 在佈局文件中添加一個NetworkImageView控件。4. 在代碼中獲取該控件的實例。
5. 設置要加載的圖片地址。
<com.android.volley.toolbox.NetworkImageView android:id="@+id/network_image_view" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center_horizontal"
/>
networkImageView.setDefaultImageResId(R.drawable.default_image); networkImageView.setErrorImageResId(R.drawable.failed_image); networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", imageLoader);