让网络请求简单点——Volley框架(下)

简单点,说话的方式简单点……(《演员》薛之谦)

这篇博客,我们将学习一下Volley加载图片的介绍及用法。

学习目标(括号内是需要用到的类)

  1. 缓存功能简单介绍(LruCache、ImageCache)
  2. 加载网络图片及监听(ImageRequest、ImageLoader、NetworkImageView)

1.准备工作

我们新建一个项目VolleyImageDemo;这里我在写一下使用Volley框架的准备工作。

  • 添加Volley的jar包
  • 添加网络权限

这样就可以使用Volley了。

2.ImageRequest的使用

同样,我们新建类继承自Application,并创建全局的请求队列,代码如下:

public class MyApplication extends Application {

public static RequestQueue queues;

@Override
public void onCreate() {
    super.onCreate();
    queues = Volley.newRequestQueue(getApplicationContext());
}

public static RequestQueue getHttpQueues() {
    return queues;
}}

这里与Volley框架()中的请求队列无异,不再过多解释。

然后我们在MainActivivty的布局文件里创建一个普通的ImageView,代码如下:

<ImageView
    android:id="@+id/iv_img"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

然后我们在MainActivity.java里将其实例化,代码如下:

private ImageView iv_img;
iv_img = (ImageView) findViewById(R.id.iv_img);

下面我们创建一个ImagerRequest类,代码如下:

ImageRequest request = new ImageRequest(url, listener, maxWidth,maxHeight, decodeConfig, errorListener);

下面我们看一下ImagerRequest的6个参数:

  • 第一个参数:请求图片的url地址;
  • 第二个参数:请求成功的监听事件;
  • 第三个参数:请求的图片要显示出来的宽度;
  • 第四个参数:请求的图片要显示出来的高度;
  • 第五个参数:对请求的图片的解码方式;
  • 第六个参数:请求失败的监听事件。

下面我将参数填充一下,代码如下:

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

        @Override
        public void onResponse(Bitmap response) {// 请求成功的监听事件

            iv_img.setImageBitmap(response);
        }
    }, 0, 0, Config.RGB_565, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {// 请求失败的监听事件

            iv_img.setBackgroundResource(R.drawable.ic_launcher);
        }
    });

这里的url我使用的图片网址为“private String url = "http://img3.imgtn.bdimg.com/it/u=2591627440,2371609101&fm=23&gp=0.jpg";”;这里我让请求成功时,使ImageView控件显示这张图片,请求失败时先是ic_launcher;至于图片的宽高,我设置为0,将显示原始图片的宽高;图片编码格式我设置为RGB。

现在我们运行一下:

这里写图片描述

OK!

3.完整请求——ImgeCache+LruCache+ImageLoader+ImageListener

首先我们在MainActivity里创建一个ImageLoader,代码如下:

ImageLoader loader = new ImageLoader(queue, imageCache);

我们可以看到,ImagerLoader对象有两个参数:queue和imageCache,这里的queue就是请求队列,我么设置为MyApplication.getHttpQueues(),而imageCache很明显就是一个ImageCache的对象,但是ImageCache不能直接使用,需要借助LruCache,所以我们先新建类BitmapCache添加接口ImageCache,实现两个自带的方法:getBitmap和putBitmap,代码如下:

public class BitmapCache implements ImageCache {

public LruCache<String, Bitmap> cache;
public int max = 10 * 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 url) {
    return cache.get(url);
}

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

这里我们新建了一个LruCache对象,然后我们定义一个LruCache的最大缓存的内存大小:max,这里定义为10M,如果缓存的图片大于10M,它会自动回收;在getBitmap里我们返回缓存里的图片;在putBitmap里放入到LruCache里面;然后我们编写构造方法,构造方法里我们实例化LruCache,然后实现以下它里面的sizeOf,返回Bitmap的大小。

这样我们的缓存就写好了!

然后将ImageLoader对象的第二个参数填充一下,代码如下:

ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(),
            new BitmapCache());

然后我们创建一个ImageListener,用来监听我们整个图片加载过程,代码如下:

ImageListener listener = ImageLoader.getImageListener(view, defaultImageResId, errorImageResId);

我们可以看到ImageListener对象有三个参数:

  • 第一个参数:ImageView控件
  • 第二个参数:默认的加载图片
  • 第三个参数:加载出错的时候

好了,我们填充一下,代码如下:

ImageListener listener = ImageLoader.getImageListener(iv_img,
            R.drawable.ic_launcher, R.drawable.ic_launcher);

这里我们的默认加载图片和加载出错的图片都设置为ic_launcher。

下面我们就要加载我们的网络图片,代码如下:

loader.get(requestUrl, listener);
loader.get(requestUrl, imageListener, maxWidth, maxHeight);

我们可以看到ImageLoader的构造方法有两种,四个参数的构造方法多了maxWidth和maxHeight,是自定义图片的宽高,这里我们使用两个参数的构造方法,代码如下:

loader.get(url, listener);

第一个参数是图片的url,第二个参数就是ImageListener的对象。

完成!我们运行一下:

这里写图片描述

这样就是一个完整的网络图片请求了!

4.使用Volley的NetworkImageView实现网络图片加载

我们首先需要创建一个控件,代码如下:

<com.android.volley.toolbox.NetworkImageView
    android:id="@+id/networkImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="30dp" />

然后我们绑定一下控件,代码如下:

private NetworkImageView netImageView;
netImageView = (NetworkImageView) findViewById(R.id.networkImageView);

NetworkImageView用起来就比较简单了,我们使用它的setImageUrl()方法,代码如下:

netImageView.setImageUrl(url, imageLoader);

第一个参数就是图片的url,而第二个参数我们发现是ImageLoader对象,所以我们在使用NetworkImageView时也需要使用ImageLoader,这里我们使用刚刚写好的ImageLoader,这样就可以使用了,另外我们可以用setDefaultImageResId()方法设置一下加载的默认图片,使用setErrorImageResId()方法设置一下加载失败的图片,代码如下:

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

这里的默认图片和加载失败图片我还是使用的ic_launcher。

好了,运行程序:

这里写图片描述

这样,我们的Volley的所有基本用法就写完了,关于Volley的具体使用还要多多实践!!!


让网络请求简单点——Volley框架(上)
让网络请求简单点——Volley框架(中)


袁程序猿的CSDN博客:安卓学习心得


往期回顾:
让网络请求简单点——Volley框架(中)
让网络请求简单点——Volley框架(上)
让你的电脑变成windows+安卓双系统
安卓四大组件——ContentProvider
SQLite详解
小程序发布,你方了吗?
安卓四大组件——Service(服务)
安卓四大组件——BroadcastReceiver(广播)
搞懂 res ->values + res ->drawable : 资源
界面美化 —— 布局
Intent——把两个Activity关联起来!
常用控件
关于Activity的生命周期

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值