Volley的使用(二):加载网络图片

声明:看郭霖大神博客后总结的,原文这里:http://blog.csdn.net/guolin_blog/article/details/17482165

使用Volley加载网络图片

3种方式

  1. ImageRequest
  2. ImageLoader
  3. NetWorkImageView

区别:

1 ImageRequest 用法和get/post基本一样,只是把StringRequest换成了ImageRequest
2 Imageloader是和 ImageCache + ImageListener一起使用的
3 NetWorkImageView 是和 Imageloader + ImageCache一起使用的

第一种:ImageRequest

/**
 * 用ImageRequest加载图片(用法和get/post基本一样,只是把StringRequest换成了ImageRequest)
 * 相关的类:RequestQueue + ImageRequest + Response.Listener
 * 1 创建一个RequestQueue对象
 * 2 创建一个ImageRequest对象
 * 3 将request添加到RequestQueue实例中
 */

代码:

    private void getImage1() {
        String url = "http://pickaka.ka12345.com/picss/2014/allimg/140612/20230/1-140612161358.jpg";
        ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {
                imageView.setImageBitmap(response);
                Toast.makeText(context, "onResponse:  " + response, Toast.LENGTH_LONG).show();
            }
        }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(context, "onErrorResponse:  " + error, Toast.LENGTH_LONG).show();
            }
        });


        request.setTag("ImageRequest01");
        AppApplication.getQueue().add(request);
}

第二种:ImageLoader(ImageCache)

根据是否使用LruCache 又分使用缓存和不使用缓存2种情况

未使用缓存

/**
 * ImageLoader(未使用:ImageCache)
 * 相关的类:RequestQueue + ImageLoader + ImageCache + ImageListener
 * 1 创建一个RequestQueue对象
 * 2 创建一个Imageloader对象
 * 3 创建一个ImageCache对象(内部不做处理)
 * 4 获取一个ImageListener对象
 * 5 调用ImageLoader的get()方法加载图片
 */

代码:

    private void getImage2() {
        String url = "http://img1.4443.com/allimg/160630/4-160630101055.jpg";

        //ImageCache不能为null
        ImageLoader imageLoader = new ImageLoader(AppApplication.getQueue(), new ImageLoader.ImageCache() {
            @Override
            public Bitmap getBitmap(String url) {
                return null;
            }

            @Override
            public void putBitmap(String url, Bitmap bitmap) {

            }
        });

        //ImageListener不是new出来的。
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);

        imageLoader.get(url,listener);
}

使用缓存

/**
 * ImageLoader:(使用:ImageCache)
 * 用到的类和接口:RequestQueue + ImageCache + Imageloader + ImageListener
 * 1 创建一个RequestQueue对象
 * 2 创建一个ImageCache对象
 * 3 创建一个Imageloader对象
 * 4 获取一个ImageListener对象
 * 5 调用ImageLoader的get()方法加载图片
 */

代码:

package com.baidu.volleydemo02;

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

import com.android.volley.toolbox.ImageLoader;

public class BitmapCache implements ImageLoader.ImageCache {

private final LruCache<String, Bitmap> lruCache;

    public BitmapCache() {
        int maxSize = 10*1024*1024;//10M
        lruCache = 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 lruCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        lruCache.put(url,bitmap);
    }
}

    private void getImage3() {
        String url = "http://img1.4443.com/allimg/160630/4-160630101055.jpg";

        ImageLoader imageLoader = new ImageLoader(AppApplication.getQueue(), new BitmapCache());

        //ImageListener不是new出来的。
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);

        imageLoader.get(url,listener);
}

第一种:NetWorkImageView

/**
 * ImageLoader:(使用:ImageCache)
 * 用到的类和接口:RequestQueue + ImageCache + Imageloader + ImageListener
 * 1 创建一个RequestQueue对象
 * 2 创建一个ImageCache对象
 * 3 创建一个Imageloader对象
 * 4 获取一个ImageListener对象
 * 5 调用ImageLoader的get()方法加载图片
 */

代码:

private void getImage4() {
    String url = "http://imgsrc.baidu.com/forum/pic/item/2f738bd4b31c87015246a74c277f9e2f0608ffac.jpg";
    ImageLoader imageLoader = new ImageLoader(AppApplication.getQueue(),new BitmapCache());

    NetworkImageView netWorkImageView = (NetworkImageView) findViewById(R.id.netWorkImageView);

    netWorkImageView.setDefaultImageResId(R.mipmap.ic_launcher);
    netWorkImageView.setErrorImageResId(R.mipmap.ic_launcher);
    netWorkImageView.setImageUrl(url,imageLoader);
}

总结

Volley的使用(一):get+post
Volley的使用(二):加载网络图片
Volley的使用(三):Volley与Activity的联动 + Volley的二次封装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值