Android平臺的網絡通訊庫,使是網通訊 更快,更簡單,更健壯php
適合場景: 數據量不大,通訊 頻繁。 大數據,流媒體是不適合使用的html
* 它主要是幫咱們載入和緩存從遠程網絡加載的圖片
* 全部的請求都必須在主線程中發出。java
提供功能:android
1. 獲取JSON 字符串,圖片,圖像(異步)json
2. 網絡請求排序緩存
3. 網絡請求的優先級處理網絡
4. 緩存異步
5. 多級別的取消請求ide
6. 與Activity的生命週期聯動大數據
--------------------------------------------------------
工程代碼: VolleyDemo.zip
--------------------------------------------------------
實例:
// 獲取JSON字符串 public void getJOSONVolley() { RequestQueue requestQueue = Volley.newRequestQueue(this); String JSONDateUrl = "http://www.wwtliu.com/jsondata.html"; //這個網址有問題,你們能夠換一個適合的網址 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( Request.Method.GET, JSONDateUrl, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject arg0) { Log.d(TAG, "Response JSONObject = " + arg0); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Log.d(TAG, "Sorry, error occur = " + arg0); } }); requestQueue.add(jsonObjectRequest); }
使用 Volley 實現圖片的異步加載,要比使用傳統的通訊方式方便不少。
ImageLoader提供了兩個get方法,具體的實現能夠查看源碼,值得注意的地方是,get(java.lang.String requestUrl, ImageLoader.ImageListener imageListener, int maxWidth, int maxHeight)這個方法中,咱們能夠經過設置最大寬高來限制加載到內存中的圖片的大小,減小OOM的發生,當加載一些大圖片時,效果仍是很是明顯的。
// 使用 Volley 實現異步加載圖片 public void loadImageVolley() { String imgUrl = "http://b.hiphotos.baidu.com/baike/w%3D268/sign=9a2cb84a0cb30f24359aeb05f094d192/a8773912b31bb05119bca003357adab44aede005.jpg"; RequestQueue requestQueue = Volley.newRequestQueue(this); final LruCache<String, Bitmap> lrucache = new LruCache<String, Bitmap>( 20); // 傳入String, 返回Bitmap ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lrucache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lrucache.get(key); } }; ImageLoader loader = new ImageLoader(requestQueue, imageCache); ImageListener imgImageListener = loader.getImageListener(iv, R.drawable.ic_launcher, R.drawable.ic_launcher); loader.get(imgUrl, imgImageListener); }
優勢: 這個控件在被父類dispatch的時候就會自動取消網絡請求,這樣咱們就不用擔憂生命週期的問題
缺點:加載大量圖片的時候可能更容易出現OOM問題,由於它沒有處理圖片的壓縮,固然,你能保證你的圖片很小或者你也能夠重寫NetworkImageView,給它添加一個設置加載尺寸的方法
<com.android.volley.toolbox.NetworkImageView android:id="@+id/iv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iv" android:layout_below="@id/iv"/>
public void NetworkImageViewVolley(){ String imgUrl = "http://b.hiphotos.baidu.com/baike/w%3D268/sign=9a2cb84a0cb30f24359aeb05f094d192/a8773912b31bb05119bca003357adab44aede005.jpg"; RequestQueue requestQueue = Volley.newRequestQueue(this); final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20); ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lruCache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lruCache.get(key); } }; ImageLoader loader = new ImageLoader(requestQueue, imageCache); iv2.setTag("url"); iv2.setImageUrl(imgUrl, loader); }
調用
ImageView iv; NetworkImageView iv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); iv2 = (NetworkImageView) findViewById(R.id.iv2); getJOSONVolley(); loadImageVolley(); NetworkImageViewVolley(); }