【威哥說】Volley是Android平臺上的網(wǎng)絡(luò)通信庫,能使網(wǎng)絡(luò)通信更快纫塌,更簡單,更健壯讲弄。Volley特別適合數(shù)據(jù)量不大但是通信頻繁的場景措左。在listView顯示圖片這方面,使用volley也是比較好的,不必?fù)?dān)心OOM錯誤避除。
【目標(biāo)】首先我們要先定一個(gè)小目標(biāo)怎披,來磨礪營學(xué)一批磨礪營自主研發(fā)的實(shí)戰(zhàn)商業(yè)項(xiàng)目。動動小手收藏轉(zhuǎn)發(fā)瓶摆,讓更多人看到凉逛。
【正文】
1.Vollley框架的學(xué)習(xí)流程:
首先,我們先下載Volley開發(fā)所需的jar包群井,Volley的Jar包下載状飞。在eclipse中新建一個(gè)工程,然后導(dǎo)入Volley開發(fā)的jar包书斜,接下來我們就可以進(jìn)行Volley的開發(fā)了诬辈。
2.最簡單的Volley的Get請求
創(chuàng)建一個(gè)請求隊(duì)列:
RequestQueue mQueue = Volley.newRequestQueue(this);
創(chuàng)建一個(gè)StringRequest:表示將請求的數(shù)據(jù)轉(zhuǎn)化為字符串返回(Volley自帶僅支持String,Image荐吉,JsonObject焙糟,JsonArray,之后的文章我會介紹自定義請求的實(shí)現(xiàn))样屠,然后我們?yōu)樗O(shè)置listener穿撮、errorListener:
StringRequest stringRequest = new StringRequest(Method.GET,"這里輸入U(xiǎn)RL地址", new Listener() {
@Override
public void onResponse(String response) {
// 處理返回請求返回的結(jié)果
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 請求出錯,處理出錯程序
}
});
將請求加入請求隊(duì)列中:請求隊(duì)列允許同時(shí)添加多個(gè)請求痪欲,也就是說混巧,我們一次性可以添加多個(gè)請求到請求隊(duì)列中
mQueue.add(stringRequest);
這樣一個(gè)簡單的Volley請求就實(shí)現(xiàn)了,簡單吧勤揩。(ImageRequest咧党、JsonObjectRequest和JsonArrayRequest的實(shí)現(xiàn)和StringRequest的實(shí)現(xiàn)類似,這里就不在多講了)陨亡。
3.Volley的Post請求
其他步驟與Get請求一致傍衡,在第二步創(chuàng)建Request的時(shí)候,我們只要將傳入的第一個(gè)參數(shù)改為 Method.POST负蠕;
如果有Post數(shù)據(jù)蛙埂,我們需要重寫getParams方法(觀察過Volley源碼的同學(xué)可以看到,源碼中g(shù)etParams函數(shù)返回的一個(gè)null遮糖,所以我們要重寫該函數(shù))
StringRequest stringRequest = new StringRequest(Method.POST,
"這里輸入U(xiǎn)RL地址", new Listener() {
@Override
public void onResponse(String response) {
// 處理返回請求返回的結(jié)果
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 請求出錯绣的,處理出錯程序
}
}) {
@Override
protected Map getParams() throws AuthFailureError {
// 在這里設(shè)置需要post的參數(shù)
Map params = new HashMap();
params.put("key1", "value1");
params.put("key2", "value2");
return params;
}
};
4.Volley的圖片加載緩存機(jī)制
創(chuàng)建一個(gè)請求隊(duì)列:
RequestQueue mQueue = Volley.newRequestQueue(this);
圖片緩存類:
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;
class BitmapCache implements ImageCache {
private LruCache mCache;
public BitmapCache() {
// 這里我們設(shè)置10M的緩存大小
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
};
創(chuàng)建一個(gè)圖片加載對象:
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
創(chuàng)建圖片的監(jiān)聽器:
ImageListener listener = ImageLoader.getImageListener(imageView,
R.drawable.ic_launcher, R.drawable.ic_launcher);
第一個(gè)參數(shù)表示顯示圖片的控件,第二個(gè)參數(shù)表示加載圖片時(shí)顯示的圖片,第三個(gè)參數(shù)表示出錯時(shí)的圖片顯示屡江。
加載圖片到控件中:
imageLoader.get("http://a.hiphotos.baidu.com/pic/w%3D230/sign=bf59456cc9fcc3ceb4c0ce30a244d6b7/4afbfbedab64034f80b90b48aec379310a551d0c.jpg",listener);
以上就是圖片加載緩存機(jī)制的演示芭概。