美文网首页
Volley基础学习

Volley基础学习

作者: MacroZH | 来源:发表于2018-04-25 21:23 被阅读0次

    Volley非常适合去进行数据量不大,但通信频繁的网络操作。
    Volley提供了如下的便利功能:
    1.JSON数据和图像等的异步下载;
    2.网络请求排序(scheduling);
    3.网络请求优先级处理;
    4.缓存;
    5.多级别取消请求;
    6.与Activity生命周期联动(Activity结束时同时取消所有网络请求);

    使用Volley进行网络请求分为三步
    1.创建请求队列Volley.newRequestQueue(context);
    2.构建请求对象 Request ,填入具体请求信息。
    3.将请求对象加入请求队列中,开始执行网络请求。

    1.使用StringRequest发送请求

        private void testFunc()
        {
    
            RequestQueue volleyQue= Volley.newRequestQueue(getContext());
            StringRequest stringRequest=new StringRequest(Request.Method.GET, "www.baidu.com", new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
                    textView.setText(s);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
    
                }
            });
            volleyQue.add(stringRequest);
    
    
        }
    

    2.使用JsonRequest发送请求

    JsonRequest是抽象类,实现了两个子类JsonObjectRequest和JsonArrayRequest,前者用于请求一段Json数据,后者用于请求Json数组。

     JsonObjectRequest jsonObjectRequest=new JsonObjectRequest("www.baidu.com", null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject jsonObject) {
                    textView.setText(jsonObject.toString());
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
    
                }
            });
    

    调用Request对象的cancel()方法可以取消请求,Request可以添加Tag,通过setTag(tag)设置Tag,请求队列通过RequestQueue.cancel(tag)取消请求。

    3.使用ImageRequest请求图片

     ImageRequest imageRequest=new ImageRequest("http://seopic.699pic.com/photo/40007/4482.jpg_wh1200.jpg", new Response.Listener<Bitmap>() {
                @Override
                public void onResponse(Bitmap bitmap) {
                    imageView.setImageBitmap(bitmap);
                }
            }, 0, 0, Bitmap.Config.ALPHA_8, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
    
                }
            });
    
            volleyQue.add(imageRequest);
    

    ImageRequest的构造函数有六个参数,第一个参数是图片URL;第二个参数是图片请求成功的回调;第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩;第五个参数用于指定图片深度;第六个参数是图片请求失败的回调

    4.使用ImageLoader请求图片

            ImageLoader imageLoader=new ImageLoader(volleyQue, new ImageLoader.ImageCache() {
    
                @Override
                public Bitmap getBitmap(String s) {
                    return null;
                }
    
                @Override
                public void putBitmap(String s, Bitmap bitmap) {
    
                }
            });
            ImageLoader.ImageListener listener=ImageLoader.getImageListener(imageView,R.drawable.default,R.drawable.default);
            imageLoader.get("http://seopic.699pic.com/photo/40007/4482.jpg_wh1200.jpg",listener);
    

    5.Volley执行过程

    Volley的执行过程如图。


    volley.jpg.png

    RequestQueue会维护一个缓存调度线程(cache线程)和一个网络调度线程池(net线程),当一个Request被加到队列中的时候,cache线程会把这个请求进行筛选:如果这个请求的内容可以在缓存中找到,cache线程会亲自解析相应内容,并分发到主线程(UI)。如果缓存中没有,这个request就会被加入到另一个NetworkQueue,所有真正准备进行网络通信的request都在这里,第一个可用的net线程会从NetworkQueue中拿出一个request扔向服务器。当响应数据到的时候,这个net线程会解析原始响应数据,写入缓存,并把解析后的结果返回给主线程。

    相关文章

      网友评论

          本文标题:Volley基础学习

          本文链接:https://www.haomeiwen.com/subject/sntulftx.html