美文网首页
Android之Volley介绍简介

Android之Volley介绍简介

作者: 破荒之恋 | 来源:发表于2016-12-24 14:01 被阅读46次

    Volley介绍简介

    齐射、迸发

    volley是Android平台上的网络通信库

    特点:

    • 通信更简单、更快
    • Get、Post 网络请求及网络图像的高效率异步处理请求
    • 排序
    • 网络请求的缓存
    • 多级别取消请求
    • 和Activity生命周期的联动

    功能:

    • 高效的Get/Post方式的数据请求交互
    • 网络图片加载和缓存
    • 官方推出、性能稳定和强劲

    Volley的使用

    1. Volley的Get和Post请求方式的使用
    2. Volley的网络请求队列建立和取消
    3. Volley与Activity生命周期的联动
    4. Volley的简单的二次回调封装

    Volley的Get和Post请求方式的使用

    1、挑选合适的对象

    • StringRequest //对返回结果不确定类型(包括后面两种)
    • JsonObjectRequest //确定类型
    • JsonArrayRequest

    2、回调的使用

    Volley的网络请求队列建立和取消队列请求

    1、建立队列请求

    2、取消队列请求

    Volley与Activity生命周期的联动

    特点:Activity销毁时,同时关闭请求

    关键点:

    • 设置Tag标签,onStop()方法里执行取消队列请求

    Volley的简单的二次回调封装

    优势:

    • 全局使用一个方式,可控,可自定义需求,灵活方便

    使用Get方式请求网络数据:

    1. 建立一个全局application类

      public class VolleyApplication extends Application
      {
      private static RequestQueue request;
      @Override
      public void onCreate()
      {
      super.onCreate();

           request=Volley.newRequestQueue(getApplicationContext());
       }
      
       public static RequestQueue getHttpRequestQueue(){
           return request;
       }
      

      }

    在主活动中获取数据并存储在请求队列中
    1、使用StringRequest

    private void request_Get()
    {
        String url="http://10.207.116.24:8888/GooglePlayServer/home?index=0";
        StringRequest request=new StringRequest(Method.GET, url, new Listener<String>() {
    
            @Override
            public void onResponse(String response)
            {
                Toast.makeText(MainActivity.this, response, 1).show();
            }
            }, new ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(MainActivity.this, error.toString(), 0).show();
            }
        });
        request.setTag("VolleyGet");//添加到队列中
        VolleyApplication.getHttpRequestQueue().add(request);
        
    }
    

    2、使用JsonObjectRequest

    private void requestJson_Get()
    {
        String url="http://10.207.116.24:8888/GooglePlayServer/home?index=0";
        JsonObjectRequest objectGet=new JsonObjectRequest(Method.GET, 
              url, null, new Listener<JSONObject>() {
    
            @Override
            public void onResponse(JSONObject response)
            {
                Toast.makeText(MainActivity.this, response.toString(), 1).show();
            }
        }, new ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(MainActivity.this, error.toString(), 0).show();
            }
        });
        objectGet.setTag("VolleyPost");//添加到队列中
        VolleyApplication.getHttpRequestQueue().add(objectGet);
        
    }
    

    使用post方式使用Volley请求网络数据

    1、使用StringRequest

    private void request_Post()
    {
        String url="http://10.207.116.24:8888/GooglePlayServer/home?";
        StringRequest request=new StringRequest(Method.GET, url, new Listener<String>() {
    
            @Override
            public void onResponse(String response)
            {
                Toast.makeText(MainActivity.this, response, 1).show();
            }
        }, new ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(MainActivity.this, error.toString(), 0).show();
            }
        }){
            //post方式多出来头信息在这里传进去
            @Override
            protected Map<String, String> getParams() throws AuthFailureError
            {
                
                Map<String ,String> hasMap=new HashMap<String, String>();
                hasMap.put("index", "0");
                //hasMap.put("","");
                return hasMap;
                
                
            }
        };
        request.setTag("VolleyPost");//添加到队列中
        VolleyApplication.getHttpRequestQueue().add(request);
    }
    

    2、使用JsonObjectRequest进行Post方式提交网络请求

    private void requestJson_post()
    {
        String url="http://10.207.116.24:8888/GooglePlayServer/home?";
        Map<String ,String> hasMap=new HashMap<String, String>();
        hasMap.put("index", "0");
        JSONObject object=new JSONObject(hasMap);
        
        JsonObjectRequest objectRequest=new JsonObjectRequest(Method.GET, url, object, new Listener<JSONObject>() {
    
            @Override
            public void onResponse(JSONObject response)
            {
                Toast.makeText(MainActivity.this, response.toString(), 1).show();
            }
        }, new Response.ErrorListener() {
    
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(MainActivity.this, error.toString(), 0).show();
            }
        });
        objectRequest.setTag("VolleyPost");//添加到队列中
        VolleyApplication.getHttpRequestQueue().add(objectRequest);
    }
    

    加载图片缓存功能简单介绍

    1、LruCache

    2、ImageCache

    加载网络图片的监听

    ImageLoader 、 ImageRequest 、NetworkImageView、ImageListener

    使用ImageRequest加载图片:

      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img=(ImageView) findViewById(R.id.img_volley);
        String url="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
         ImageRequest request=new ImageRequest(url, new Listener<Bitmap>() {
    
                @Override
                public void onResponse(Bitmap arg0)
                {
                    img.setImageBitmap(arg0);
                }
            }, 0, 0, Config.RGB_565, new Response.ErrorListener() {
    
                @Override
                public void onErrorResponse(VolleyError arg0)
                {
                    img.setImageResource(R.drawable.ic_launcher);
                }
            });
    //存储到队列中
         MyApplication.getRequest().add(request);
    }
    

    使用ImageLoader获取网络图片

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img=(ImageView) findViewById(R.id.img_volley);
        String url="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
        
        ImageLoader loader=new ImageLoader(MyApplication.getRequest(), new BitmapCache());
        
        ImageListener listener=ImageLoader.getImageListener(img,
                    R.drawable.ic_launcher, R.drawable.ic_launcher);//加载默认图片、加载失败图片
        
        loader.get(url, listener);
    
    }
    

    自定义BitmapCache

    public class BitmapCache implements ImageCache
    {
        public LruCache<String ,Bitmap>cache;
        private int max=10*1024*1024;
        
        public BitmapCache(){
            cache=new LruCache<String, Bitmap>(max){
                @Override
                protected int sizeOf(String key, Bitmap value)
                {
                    return value.getRowBytes()*value.getHeight();
                }
            };
        }
    
        @Override
        public Bitmap getBitmap(String arg0)
        {
            return cache.get(arg0);
        }
    
        @Override
        public void putBitmap(String arg0, Bitmap arg1)
        {
            cache.put(arg0, arg1);
        }
    
    }
    

    使用NetworkImageView控件加载网络图片,先实例化

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img=(ImageView) findViewById(R.id.img_volley);
        netImageView=(NetWorkImageView)findViewById(R.id.network);
        
    
        String url="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png";
        
        ImageLoader loader=new ImageLoader(MyApplication.getRequest(), new BitmapCache());
        
        netImageView.setDefaultImageResId(R.drawable.ic_launcher);
        netImageView.setErrorImageResId(R.drawable.ic_launcher);
        netImageView.setImageUrl(url,loader);
        
    }

    相关文章

      网友评论

          本文标题:Android之Volley介绍简介

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