Volley-----网络请求框架

谷歌在2013年I/O大会上声明的框架。

特点

1. Volley的优势在于处理小文件的http请求;
2. Volley在处理高分辨率的图像压缩上有很好的支持;
3.内存和磁盘缓存;
4.debugging和tracing工具 
5.获取json对象
6.自定义请求
7. NetworkImageView在GC的使用模式上更加保守,在请求清理上也更加积极,networkimageview仅仅依赖于强大的内存引用,并当一个新请求是来自ImageView或ImageView离开屏幕时 会清理掉所有的请求数据。

使用方法


volley请求是通过RequestQueue请求队列来进行管理的。


请求网络


  1. 创建一个RequestQueue请求队列
  2. 创建Request对象
  3. 将Request对象添加到RequestQueue中

private void get(){
        RequestQueue queue= Volley.newRequestQueue(getApplicationContext());//创建一个单例的RequestQueue对象
        String url="http://121.41.123.1/test/index.php";
        StringRequest request=new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d("TAG",response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        queue.add(request);
    }

加载图片


RequestQueue queue = Volley.newRequestQueue(getApplicationContext());        String url = "https://www.baidu.com/img/bdlogo.png";
        //第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。
        //第五个参数就是ImageView里中的属性ScaleType
        //第六个参数用于指定图片的颜色属性
        ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {
                ImageView iv= (ImageView) findViewById(R.id.iv);
                iv.setImageBitmap(response);
            }
        }, 0, 0, ImageView.ScaleType.CENTER, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        queue.add(request);

另外volley框架还对imageView控件进行了自定义,可以自动加载网络的图片。
只需要在布局文件中声明该控件后,然后设置要加载的图片就可以。

 niv.setDefaultImageResId(R.mipmap.ic_launcher);//设置加载中显示的图片        niv.setErrorImageResId(R.mipmap.ic_launcher);//设置加载失败时显示的图片
        niv.setImageUrl("https://www.baidu.com/img/bdlogo.png",  loader);//设置目标图片的URL地址

自定义Request请求


  1. 继承Request
  2. 重写parseNetworkResponse


public class GsonRequest<T> extends Request<T> {

    private final Response.Listener<T> mListener;

    private Gson mGson;

    private Class<T> mClass;

    public GsonRequest(int method, String url, Class<T> clazz, Response.Listener<T> listener,
                       Response.ErrorListener errorListener) {
        super(method, url, errorListener);
        mGson = new Gson();
        mClass = clazz;
        mListener = listener;
    }

    public GsonRequest(String url, Class<T> clazz, Response.Listener<T> listener,
                       Response.ErrorListener errorListener) {
        this(Method.GET, url, clazz, listener, errorListener);
    }

    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(mGson.fromJson(jsonString, mClass),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        }
    }

    @Override
    protected void deliverResponse(T response) {
        mListener.onResponse(response);
    }

}

Volley框架本身架构的设计


这里写图片描述

  1. volley框架有一个主线程和一个缓存线程有多个网络线程。
  2. 每当有新请求的时候,就会把请求加到请求队列里面,当该请求无效时,就从该请求队列里面移除。
  3. 把请求的消息返回给主线程
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值