Volley使用(1)

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("https://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);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值