Volley网络框架之缓存加载图片、Post与get的数据请求

         前言: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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雨敏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值