Volley使用(1)

来源:互联网 发布:python rpc java 编辑:程序博客网 时间:2024/06/11 04:48

Volley使用

参考博客
郭神 http://blog.csdn.net/guolin_blog/article/details/17482165
http://www.cnblogs.com/zyw-205520/p/4950357.html

此处输入图片的描述
- 设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
- 自动调度网络请求
- 多个并发的网络连接
- 通过使用标准的HTTP缓存机制保持磁- 盘和内存响应的一致
- 支持请求优先级
- 支持取消请求的强大API,可以取消单个请求或多个
- 易于定制
- 健壮性:便于正确的更新UI和获取数据
- 包含调试和追踪工具

Volley中的RequestQueue 和 Request

  • RequestQueue 用来执行请求的请求队列
  • Request 用来构造一个请求对象
  • Request对象主要有以下几种类型:
    • StringRequest 响应的主体为字符串
    • JsonArrayRequest 发送和接收JSON数组
    • JsonObjectRequest 发送和接收JSON对象
    • ImageRequest 发送和接收Image

StringRequest

    第一步    RequestQueue requestQueue = RequestQueueManager.getInstance(StringActivity.this);    第二步    StringRequest stringRequest = new StringRequest(                "https://www.baidu.com",                new Response.Listener<String>() {                    @Override                    public void onResponse(String s) {                        tv_show.setText(s);                    }                },                new Response.ErrorListener() {                    @Override                    public void onErrorResponse(VolleyError volleyError) {                        Log.e(TAG, "onErrorResponse: " + volleyError);                    }                });    第三步    requestQueue.add(stringRequest);RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。

JsonObjectRequest

        String url = "http://api.androidhive.info/volley/person_object.json";        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url,                null,                new Response.Listener<JSONObject>() {                    @Override                    public void onResponse(JSONObject jsonObject) {                        tv_object.setText(jsonObject.toString());                    }                },                new Response.ErrorListener() {                    @Override                    public void onErrorResponse(VolleyError volleyError) {                    }                });        RequestQueueManager.getInstance(JsonObjectActivity.this).add(jsonObjectRequest);

ImageRequest 没有缓存的

        ImageRequest imageRequest = new ImageRequest(                "http://img5.duitang.com/uploads/item/201409/14/20140914162144_MBEmX.jpeg",                new Response.Listener<Bitmap>() {                    @Override                    public void onResponse(Bitmap bitmap) {                        iv.setImageBitmap(bitmap);                        Log.e(TAG, "onResponse: " );                    }                }, 0 , 0 , Bitmap.Config.RGB_565,#这里的0 ,0 , Bitmap.Config.RGB_565,指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。第五个参数用于指定图片的颜色属性,                new Response.ErrorListener() {                    @Override                    public void onErrorResponse(VolleyError volleyError) {                        iv.setImageResource(R.mipmap.ic_launcher);                        Log.e(TAG, "onErrorResponse: " );                    }                });        RequestQueueManager.getInstance(imageNoCacheActivity.this).add(imageRequest);

前面三个的操作基本上都一样

ImageLoader 缓存

        ImageLoader imageLoader = new ImageLoader(RequestQueueManager.getInstance(imageCacheActivity.this),                new BitmapCache());        ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv , R.drawable.de,R.drawable.error);#第一个参数指定用于显示图片的ImageView控件,第二个参数指定加载图片的过程中显示的图片,第三个参数指定加载图片失败的情况下显示的图片        imageLoader.get("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener);    }    private class BitmapCache implements ImageLoader.ImageCache{        private LruCache<String,Bitmap> mCache;        public BitmapCache(){            int maxSize = 10 * 1024 * 1024;            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);        }    }
原创粉丝点击