前言:Volley作为主流网络框架之一,必然有它的优点。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身, 它的常用在数据量不大,但网络通信频繁,而且有图片缓存功能。但是如果有大文件下载,Volley的表现就会非常糟糕,我建议使用okhttp框架,落雨敏下一篇就写okhttp框架的使用。
1.Volley的网络请求队列建立与取消队列请求-----------------------------------------------
创建请求队列,方便灵活的取消队列。
public class ApplicationTest extends Application{
public static RequestQueue queues;//请求队列
@Override
public void onCreate() {
super.onCreate();
queues=Volley.newRequestQueue(getApplicationContext());
}
public static RequestQueue getHttpQueues(){
return queues;
}
}
2.Volley的Get和Post请求方式的使用---------------------------------------
StringRequest:主要使用在对请求数据的返回类型不确定的情况下,StringRequest涵盖了JsonObjectRequest和JsonArrayRequest。
private void get_StringRequest() {
String url="https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443";
StringRequest request=new StringRequest(Method.GET, url,
//请求成功回调
new Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
}
},
//请求失败回调
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
}
);
request.setTag("testGet");//设置请求的Tag标签,可以在全局请求队列中通过Tag标签进行请求的查找
ApplicationTest.getHttpQueues().add(request); //将请求加入全局队列中
}//get方法end
private void post_StringRequest() {
String url="https://tcc.taobao.com/cc/json/mobile_tel_segment.htm";
StringRequest request=new StringRequest(Method.POST, url,
//请求成功
new Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response.toString(),Toast.LENGTH_LONG).show();
}
},
//请求失败
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
}
)
{
//自动调用传参数方法
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
//将请求参数名与参数值放入map中
map.put("tel","15850781443");
return map;
}
};//
request.setTag("testPost");//设置请求的Tag标签,可以在全局请求队列中通过Tag标签进行请求的查找
ApplicationTest.getHttpQueues().add(request); //将请求加入全局队列中
}//post方法end
JsonObjectRequest:当确定请求数据的返回类型为JsonObject时使用。
private void get_JsonObjectRequest() {
String url="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.4.255.255";
//第三个请求参数是JsonObject,由于是get请求,在url中有了,设置null
JsonObjectRequest request=new JsonObjectRequest(Method.GET, url, null,
new Listener<JSONObject>() {
//请求成功
@Override
public void onResponse(JSONObject response) {
Toast.makeText(MainActivity.this,response.toString(),Toast.LENGTH_LONG).show();
}
},
//请求失败
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
}
);
request.setTag("testGet");//设置请求的Tag标签,可以在全局请求队列中通过Tag标签进行请求的查找
ApplicationTest.getHttpQueues().add(request); //将请求加入全局队列中
}//get方法end
private void post_JsonObjectRequest() {
String url = "http://www.kuaidi100.com/query";
Map<String,String> map = new HashMap<>();
map.put("type","yuantong");
map.put("postid","229728279823");
JSONObject jsonRequest=new JSONObject(map);//参数
JsonObjectRequest request=new JsonObjectRequest(url, jsonRequest,
//请求成功
new Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(MainActivity.this,response.toString(),Toast.LENGTH_LONG).show();
}
},
//请求失败
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
});
request.setTag("testPost");//设置请求的Tag标签,可以在全局请求队列中通过Tag标签进行请求的查找
ApplicationTest.getHttpQueues().add(request); //将请求加入全局队列中
}//post方法end
3.Volley的网络图片加载-------------------------------------------------
//-----------------------定义缓存类-----------------------
public class BitmapCache implements ImageCache{
//LruCache是基于内存的缓存类
private LruCache<String,Bitmap> lruCache;
//LruCache的最大缓存大小
private int max = 10 * 1024 * 1024;
public BitmapCache() {
lruCache = new LruCache<String, Bitmap>(max){
@Override
//缓存图片的大小
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
//超过最大自动回收
@Override
public Bitmap getBitmap(String s) {
return lruCache.get(s);
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
lruCache.put(s,bitmap);
}
}
//-------------------------main方法调用--------------------------
private void loadImageWithCache() {
String url = "http://img3.duitang.com/uploads/item/201412/16/20141216233042_B8WXG.jpeg";
ImageLoader loader = new ImageLoader(ApplicationTest.getHttpQueues(), new BitmapCache());
//默认在加载时图片,加载失败时图片
ImageListener listener = loader.getImageListener(image,R.drawable.defult,R.drawable.defult);
//加载及缓存网络图片
loader.get(url,listener);
}
4.Volley的效果图片-------------------------------------------------
5.总结
免费源码下载(包含完善的自定义封装)
源码下载地址:http://download.csdn.net/detail/lin857/9677695