Volley的使用

来源:互联网 发布:python教学视频 编辑:程序博客网 时间:2024/05/22 10:41

Volley是一个比较热门的网络框架,那么如何使用它呢?下面是对它使用的总结:

首先在app目录下的build.gradle添加依赖:

compile 'com.android.volley:volley:1.0.0'
 不管你想要用什么请求,或者是加载图片,都是跟着三个步骤走:(1)创建请求队列,(2)创建请求,(3)将请求添加到队列中去。

Get请求:步骤如上述,注意在创建请求时,要传入url,请求成功的监听,请求失败的监听。

 //1.创建一个请求队列        final RequestQueue request = Volley.newRequestQueue(MainActivity.this);        //2.创建一个请求        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {            @Override            public void onResponse(String response) {                tv_result.setText(response);            }        }, new Response.ErrorListener() {//发生异常            @Override            public void onErrorResponse(VolleyError error) {                tv_result.setText("加载错误");            }        });        //3.将创建的请求添加到请求队列中去        request.add(stringRequest);
Post请求:与Get请求不同的是,请求的第一参数是请求方法,并且可以在请求中的getParams方法中以Map对象添加参数
 //1.创建一个请求队列        RequestQueue requestQueue = Volley.newRequestQueue(this);        //2.创建一个post请求        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {            @Override            public void onResponse(String response) {                tv_result.setText(response);            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                tv_result.setText("加载失败" + error.getMessage());            }        }) {            @Override            protected Map<String, String> getParams() throws AuthFailureError {                Map<String, String> mMap = new HashMap<>();                //添加参数                return super.getParams();            }        };        //3.将Post请求添加到请求队列中去        requestQueue.add(stringRequest);
Json请求:即返回的数据格式为Json,与Get相同,不过请求的对象不同,有JsonObject和JsonArray请求,根据需要做相应的请求。

 //1.创建一个请求队列        final RequestQueue requestQueue = Volley.newRequestQueue(this);        //2.创建一个post请求        JsonObjectRequest jsonRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {            @Override            public void onResponse(JSONObject response) {                tv_result.setText(response.toString());            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                tv_result.setText("加载失败:" + error);            }        });        //3.将Post请求添加到请求队列中去        requestQueue.add(jsonRequest);
ImageRequest请求:步骤不变,ImageRequest的参数为:图片地址,请求成功监听,图片的最大宽度,图片的最大高度,图片的参数(位),请求失败监听(可再次回调中设置请求失败显示的图片)
//1.创建请求队列        RequestQueue request = Volley.newRequestQueue(MainActivity.this);        //2.创建请求        ImageRequest imageRequest = new ImageRequest(imgUrl, new Response.Listener<Bitmap>() {            @Override            public void onResponse(Bitmap response) {                mImageView.setImageBitmap(response);            }        }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                mImageView.setImageResource(R.mipmap.ic_launcher);            }        });        //3.将请求添加到请求队列中去        request.add(imageRequest);
ImageLoader请求:第一个参数为请求队列,第二个是缓存对象
 //1.创建请求队列        RequestQueue request = Volley.newRequestQueue(MainActivity.this);        //2.创建一个请求        ImageLoader imageLoader = new ImageLoader(request,                new ImageLoader.ImageCache() {//图片缓存            @Override            public Bitmap getBitmap(String url) {                return null;            }            @Override            public void putBitmap(String url, Bitmap bitmap) {            }        }        );        //3.加载图片        ImageLoader.ImageListener listener = imageLoader.getImageListener(mImageView,                R.mipmap.ic_launcher, R.mipmap.ic_launcher);        imageLoader.get(imgUrl, listener);
缓存对象可以自己定义,继承ImageCache,然后实现它的get和set方法,并设置内存的大小,贴下代码:
public class BitmapCache implements ImageLoader.ImageCache {    private LruCache<String, Bitmap> mCache;    public BitmapCache() {        int maxSize = 10 * 1024 * 1024;//10m        mCache = new LruCache<String, Bitmap>(maxSize) {            @Override            protected int sizeOf(String key, Bitmap value) {                return value.getRowBytes() * value.getHeight();            }        };    }    @Override    public Bitmap getBitmap(String url) {        return mCache.get(url);    }    @Override    public void putBitmap(String url, Bitmap bitmap) {        mCache.put(url, bitmap);    }}
Volley框架还提供了一个控件:NetworkImageView,它的用法与普通的ImageView类似,不过它可以结合ImageLoader请求,可以设置请求错误的默认图片、和没有请求时的默认图片:
  //1.创建请求队列        RequestQueue request = Volley.newRequestQueue(MainActivity.this);        ImageLoader imageLoader=new ImageLoader(request,new BitmapCache());        //设置默认图片        mNetImageView.setDefaultImageResId(R.mipmap.ic_launcher);        mNetImageView.setErrorImageResId(R.mipmap.ic_launcher);        //加载图片        mNetImageView.setImageUrl(imgUrl,imageLoader);

Volley框架的基本用法差不多有这些,后续还会试着去读读它的源码理解理解。






0 0
原创粉丝点击