Volley的用法

  简介

我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。

不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。

Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

关于加载图片的用法

ImageRequest:

        ImageRequest ir = new ImageRequest(url, new Listener<Bitmap>() {

            @Override
            public void onResponse(Bitmap arg0) {
                mIv.setImageBitmap(arg0);

            }//0,0表示显示原图
        }, 0, 0, Config.RGB_565, new ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError arg0) {
                mIv.setImageResource(R.drawable.ic_launcher);
            }
        });
        MyApplication.getQueues().add(ir);
    }

ImageLoader+缓存

ImageLoader loader = new ImageLoader(MyApplication.getQueues(), new BitmapCache());
        ImageListener listener = ImageLoader.getImageListener(mIv, R.drawable.ic_launcher, R.drawable.ic_launcher);
        loader.get(url, listener);

缓存类

public class BitmapCache implements ImageCache {
    private 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);

    }

}

使用ImageLoader+缓存+NetworkImageView

        ImageLoader loader = new ImageLoader(MyApplication.getQueues(), new BitmapCache());
        mNIv.setDefaultImageResId(R.drawable.ic_launcher);
        mNIv.setErrorImageResId(R.drawable.ic_launcher);
        mNIv.setImageUrl(url, loader);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值