Volley框架让你告别繁琐的多线程

有些天没有写东西了,今晚来一发,以前我写Android的网络部分基本上都是用多线程。然而前段时间无意中发现其实谷歌早在2013年就推出过Volley框架。
![谷歌官方图片](https://img-blog.csdn.net/20151012224158106) 

通过图片我们大概可以了解Volley框架主要是为了解决网络并发,以及对网络请求做了一些优化。其实原理还是在基于多线程,只是谷歌将它好好的封装了,给我们开发者省去了不少麻烦。而且加载网络图片还给增加了缓存。接下来不罗嗦,直接上代码,这是一个加载本地服务器图片的Demo

(ps:注释的部分是另一种处理方法)
public class MainActivity extends Activity {
    private ImageView imageview;
    private NetworkImageView mNetworkImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //mNetworkImageView = (NetworkImageView) findViewById(R.id.networkImageView);
        //loadImageviewByVolley();
        //showImageByNetworkImageView();

    }

    private void loadImageviewByVolley() {
        String url = "http://192.168.191.1:8080/Demo/01.jpg";
        imageview = (ImageView) findViewById(R.id.image_img);
        /*
         * RequestQueue requestQueue=Volley.newRequestQueue(this); final
         * LruCache<String,Bitmap> lruCache=new LruCache<String, Bitmap>(20);
         * ImageCache imageCache=new ImageCache() {
         * 
         * @Override public void putBitmap(String url, Bitmap bitmap) { // TODO
         * Auto-generated method stub lruCache.put(url, bitmap); }
         * 
         * @Override public Bitmap getBitmap(String url) {
         * 
         * return lruCache.get(url); } }; ImageLoader imageLoader=new
         * ImageLoader(requestQueue, imageCache); ImageListener
         * listener=ImageLoader.getImageListener(imageview,
         * R.drawable.ic_launcher, R.drawable.ic_launcher); imageLoader.get(url,
         * listener);
         */

        RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
        ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
        ImageListener listener = ImageLoader.getImageListener(imageview,R.drawable.default_image, R.drawable.default_image);
        imageLoader.get("http://192.168.191.1:8080/Demo/01.jpg", listener);

    }

    private void showImageByNetworkImageView() {
        String imageUrl = "http://192.168.191.1:8080/Demo/01.jpg";
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(
                20);
        ImageCache imageCache = new ImageCache() {
            @Override
            public void putBitmap(String key, Bitmap value) {
                lruCache.put(key, value);
            }

            @Override
            public Bitmap getBitmap(String key) {
                return lruCache.get(key);
            }
        };
        ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);
        mNetworkImageView.setTag("url");
        mNetworkImageView.setImageUrl(imageUrl, imageLoader);
    }
    public void displayImg(View view){
        ImageView imageView = (ImageView)this.findViewById(R.id.image_img);
        RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); 

        ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
//      ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {
//          @Override
//          public void putBitmap(String url, Bitmap bitmap) {
//          }
//
//          @Override
//          public Bitmap getBitmap(String url) {
//              return null;
//          }
//      });

        ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.default_image, R.drawable.default_image);
        imageLoader.get("http://192.168.191.1:8080/Demo/01.jpg", listener);
        //指定图片允许的最大宽度和高度
        //imageLoader.get("http://developer.android.com/images/home/aw_dac.png",listener, 200, 200);
    }


}

这是处理缓存类
public class BitmapCache implements ImageCache {

    private LruCache<String, Bitmap> cache;

    public BitmapCache() {
        cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
            @Override
            protected int sizeOf(String key, Bitmap bitmap) {
                return bitmap.getRowBytes() * bitmap.getHeight();
            }
        };
    }

    @Override
    public Bitmap getBitmap(String url) {
        return cache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        cache.put(url, bitmap);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值