Volley

来源:互联网 发布:招聘网络主播 编辑:程序博客网 时间:2024/06/06 02:27

  • 简介
  • 特点
  • 使用
    • 网络请求队列的建立与取消
    • Get与Post请求方式
      • Get请求方式
      • Post请求方式
    • 与Activity的生命周期相关联
    • 网络图片加载
    • 网络图片加载并缓存

简介

Volley意为齐射、并发的意思,是Google在2013年发布的Android平台上的网络通信库



特点

  • 网络通信更快,更简单(高效地Get、Post请求方式)
  • 网络图片加载与缓存
  • 请求排序(建立了请求队列)
  • 多级别取消请求
  • 可以与Activity的生命周期进行关联

注意:不适合数据的上传与下载



使用

网络请求队列的建立与取消

MyApplication.java

package com.example.demo;import android.app.Application;import com.android.volley.RequestQueue;import com.android.volley.toolbox.Volley;/** * 创建全局的请求队列 */public class MyApplication extends Application {    public static RequestQueue mRequestQueue;    @Override    public void onCreate() {        super.onCreate();        mRequestQueue = Volley.newRequestQueue(getApplicationContext());    }    public static RequestQueue getRequestQueue(){        return  mRequestQueue;    }}


Get与Post请求方式

有三个请求对象StringRequest、JsonObjectRequest、JsonArrayRequest,其中StringRequest包含了另外两个对象


Get请求方式

/**  * 使用StringRequest发送Get请求        */String url = "http://xxx/get?name=zhangsan&sex=male";StringRequest request = new StringRequest(Request.Method.GET, url,             new Response.Listener<String>() {                @Override                public void onResponse(String s) {                }            }, new Response.ErrorListener() {                @Override                public void onErrorResponse(VolleyError volleyError) {                }            });request.setTag("Get");MyApplication.getRequestQueue().add(request);


/**  * 使用JsonObjectRequest发送Get请求        */String url = "http://xxx/get?name=zhangsan&sex=male";JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {            @Override            public void onResponse(JSONObject jsonObject) {            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {            }           });request.setTag("Get");MyApplication.getRequestQueue().add(request);


Post请求方式

/**  * 使用StringRequest发送Post请求        */String url = "http://xxx";StringRequest request = new StringRequest(Request.Method.POST,url,    new Response.Listener<String>(){            @Override            public void onResponse(String s) {            }    },new Response.ErrorListener(){            @Override            public void onErrorResponse(VolleyError volleyError) {            }     }){         /**           *           * 用户在使用Post请求方式中参数的传递           */            @Override     protected Map<String, String> getParams() throws AuthFailureError {         Map<String,String> hashMap = new HashMap<>();         hashMap.put("name","zhangsan");                     hashMap.put("sex","male");         return hashMap;     }};request.setTag("Post");MyApplication.getRequestQueue().add(request);        


/**  * 使用JsonObjectRequest发送Post请求        */String url = "http://xxxx";HashMap<String,String> hashMap = new HashMap<>();hashMap.put("name","zhangsan");hashMap.put("sex","male");JSONObject object = new JSONObject(hashMap);JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {            @Override            public void onResponse(JSONObject jsonObject) {            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {            }        });request.setTag("Post");MyApplication.getRequestQueue().add(request);



与Activity的生命周期相关联

/** * 将Volley与Activity的生命周期进行关联 */   @Override   protected void onStop() {       super.onStop();       /**        * 通过给定的TAG值,将指定的队列全部关闭        */   MyApplication.getRequestQueue().cancelAll("Post");   }



网络图片加载

String url = "https://www.baidu.com/img/bdlogo.png";ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {       @Override       public void onResponse(Bitmap bitmap) {       }   }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError volleyError) {            }    });request.setTag("Get");MyApplication.getRequestQueue().add(request);



网络图片加载并缓存

package com.example.demo;import android.graphics.Bitmap;import android.util.LruCache;import com.android.volley.toolbox.ImageLoader;public class BitmapCache implements ImageLoader.ImageCache {    LruCache<String,Bitmap> cache;    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 s) {        return cache.get(s);    }    @Override    public void putBitmap(String s, Bitmap bitmap) {        cache.put(s,bitmap);    }}

方式一

String url = "https://www.baidu.com/img/bdlogo.png";ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());ImageListener listener = ImageLoader.getImageListener(iv,R.drawable.default,R.drawable.error)imageLoader.get(url,listener);

方式二

String url = "https://www.baidu.com/img/bdlogo.png";ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());NetworkImageView networkImageView=(NetworkImageView)findViewById(R.id.img); networkImageView.setDefaultImageResId(R.drawable.default);    networkImageView.setErrorImageResId(R.drawable.error);      networkImageView.setImageUrl(url,imageLoader);
0 0