volley是google在2013年發佈的一個處理或緩存網絡請求的庫,他的主要功能是請求網絡json數據和加載圖片,能使網絡通信更簡單,更快,更健壯。他適用於網絡請求數據頻繁但數據量不大的操作。
volley使用了線程池作爲基礎的架構,主要分爲主線程,cache線程和network線程。主線程和cache線程只有一個,而花心的network線程可以有多個,因爲這樣可以解決並行的問題,這樣世界就和諧了。
但是如何使用volley那?
一:請求json數據
第一步:肯定要有一個volley的jar包,這個包可以從githup上獲取
git clone https://android.googlesource.com/platform/frameworks/volley
第二步:導入jar包之後要幹嘛哪?
當然利用這個jar包請求數據,話說volley支持網絡請求json數據和加載網絡圖片,而我們首先來請求一下json數據
首先,必須得有一個 請求隊列的對象
a)RequestQueue mRequestQueue=Volley.RequestQueue(this);
第二步:當然要有你所請求數據的網址
b)String url="";
第三步:你所請求的數據是json數據,那就聲明一個json請求對象
c)JSONObjectRequest jsonRq=new JSONRequest() (Request.Method.GET,url,null,new
Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i(TAG,response.toString());
parseJSON(response);
va.notifyDataSetChanged();
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i(TAG,error.getMessage());
}
});
第四步:將json請求對象加入到請求隊列中,若沒有這一步,數據啥的都是不出來的哦。
d) mRequestQueue.add(jsonRq);
二: 使用volley異步加載圖片
網絡請求圖片的三種方式:
1):應用ImageRequest單張的網絡請求圖片
singleImg=(ImageView)findViewById(R.id.volley_img_single_imgeview);
ImageRequest imgRequest=new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap arg0) {
// TODO Auto-generated method stub
singleImg.setImageBitmap(arg0);
}
}, 300, 200, Config.ARGB_8888, new ErrorListener(){
@Override
public void onErrorResponse(VolleyError arg0) {
// TODO Auto-generated method stub
}
});
mRequestQueue.add(imgRequest);
2)ImageLoader:
//聲明請求隊列
RequestQueue mRequestQueue = Volley.newRequestQueue(this);
final LruCache<String, Bitmap> mImageCache = new LruCache<String, Bitmap>(
20);
ImageCache imageCache = new ImageCache() {
@Override
public void putBitmap(String key, Bitmap value) {
mImageCache.put(key, value);
}
@Override
public Bitmap getBitmap(String key) {
return mImageCache.get(key);
}
};
ImageLoader mImageLoader = new ImageLoader(mRequestQueue, imageCache);
// imageView是一個ImageView實例
// ImageLoader.getImageListener的第二個參數是默認的圖片resource id
// 第三個參數是請求失敗時候的資源id,可以指定爲0
ImageListener listener = ImageLoader
.getImageListener(imageView, android.R.drawable.ic_menu_rotate,
android.R.drawable.ic_delete);
mImageLoader.get("http://a.hiphotos.baidu.com/album/h%3D800%3Bcrop%3D0%2C0%2C1280%2C800/sign=5f024b518326cffc762ab2b2893a29e2/72f082025aafa40fa3bcf315aa64034f79f019fb.jpg", listener);
3): 使用NetWorkImageView
NetworkImageView繼承自ImageView,是Volley提供的一個全新的簡單加載圖片的控件
NetworkImageView netImgView=(NetworkImageView)findViewById(R.id.volley_img_networkimgeview);
netImgView.setTag("url");
netImgView.setImageUrl("http://a.hiphotos.baidu.com/album/h%3D800%3Bcrop%3D0%2C0%2C1280%2C800/sign=5f024b518326cffc762ab2b2893a29e2/72f082025aafa40fa3bcf315aa64034f79f019fb.jpg",mImageLoader);