Google開源庫-Volley

Android平臺的網絡通訊庫,使是網通訊 更快,更簡單,更健壯php

適合場景: 數據量不大,通訊 頻繁。 大數據,流媒體是不適合使用的html

    * 它主要是幫咱們載入和緩存從遠程網絡加載的圖片
    * 全部的請求都必須在主線程中發出。java

 

提供功能:android

1. 獲取JSON 字符串,圖片,圖像(異步)json

2. 網絡請求排序緩存

3. 網絡請求的優先級處理網絡

4. 緩存異步

5. 多級別的取消請求ide

6. 與Activity的生命週期聯動大數據

--------------------------------------------------------

工程代碼: VolleyDemo.zip

--------------------------------------------------------

實例:

1. 使用 Volley 實現 JSON 字符串請求

// 獲取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);
}

 

2. 使用 Volley 實現異步加載圖片

     使用 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);
}

 

3. 使用 NetWorkImageView 完成圖片加載

    優勢: 這個控件在被父類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();
}
相關文章
相關標籤/搜索