热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android网络连接:Volley(齐射)之ImageRequest与NetworkImageView网络图片下载

一、ImageRequest不知道将ImageRequest放在这里进行介绍是否合适,因为毕竟它属于一个请求队列,与StringRequest、Json

一、ImageRequest

  不知道将ImageRequest放在这里进行介绍是否合适,因为毕竟它属于一个请求队列,与StringRequest、JsonRequest、JsonArrayRequest请求差不多,前面的三种都是用于请求文本类型的,而ImageRequest是请求的图片,但是同样的他们太都离不开RequestQueue,都必须添加到请求队列中。

1、1使用步骤

(1)在布局文件中添加ImageView控件,用于网络图片的显示
(2)创建请求队列RequestQueue
(3)创建ImageRequest

1.2示例代码段

//此处是对RequestQueue的单例,具体代码在后面展示
//可以直接使用RequestQueue queue2=new RequestQueue();代替
RequestQueue queue2=((MyApplication)getApplication()).getQueue();String url2="http://pic3.zhongsou.com/image/3800f20b9d5a32a494f.jpg";//参数:url、监听器、图片最大高度与宽度,写0则是按照原图大小显示ImageRequest imgrequest=new ImageRequest(url2, new Listener() {@Overridepublic void onResponse(Bitmap arg0) {imgview.setImageBitmap(arg0);}}, 0, 0, Config.RGB_565, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {}});//注意最后将请求放入请求队列中queue2.add(imgrequest);

二、NewWorkImageView

这里写图片描述
  NewWorkImageView的使用调用了Volley的ImageLoader、ImageCache、Lrucache,看起来比较麻烦,当然我们也可以直接使用google原代码中给出的单例(后面代码中的MySingleton,这里进行单例的主要目的是不要有过多的请求队列和创建多个ImageLoader),也可以自己写一个封装类来获得,

2、1使用步骤

1、首先在布局中添加networkImageView(注意写全包名)

<com.android.volley.toolbox.NetworkImageViewandroid:id&#61;"&#64;&#43;id/networkImageview"android:layout_width&#61;"400dp"android:layout_height&#61;"400dp"android:layout_gravity&#61;"center_horizontal"/>

2、创建ImageLoader&#xff0c;对它进行单例&#xff08;其中涉及到ImageCache、Lrucache&#xff09;
3、通过networkImageView对单例的内容进行获得ImageLoader加载图片

2、2示例


2.2.1google给出的单例

public class MySingleton {private static MySingleton mInstance;private RequestQueue mRequestQueue;private ImageLoader mImageLoader;private static Context mCtx;//只产生一次private MySingleton(Context context) {mCtx &#61; context;mRequestQueue &#61; getRequestQueue();mImageLoader &#61; new ImageLoader(mRequestQueue,new ImageLoader.ImageCache() {//写在ImageLoader内部&#xff0c;证明LruCache是属于它的那个private final LruCachecache &#61; new LruCache(20);&#64;Overridepublic Bitmap getBitmap(String url) {return cache.get(url);}&#64;Overridepublic void putBitmap(String url, Bitmap bitmap) {cache.put(url, bitmap);}});}//单例模式&#xff0c;添加synchronized 防止线程过多时出问题public static synchronized MySingleton getInstance(Context context) {if (mInstance &#61;&#61; null) {mInstance &#61; new MySingleton(context);}return mInstance;}public RequestQueue getRequestQueue() {//在没有请求的情况下才创建&#xff0c;否则不进行创建&#xff0c;调用没有被回收的if (mRequestQueue &#61;&#61; null) {mRequestQueue &#61; Volley.newRequestQueue(mCtx.getApplicationContext());}return mRequestQueue;}public void addToRequestQueue(Request req) {getRequestQueue().add(req);}public ImageLoader getImageLoader() {return mImageLoader;}}

2.2.2自己写的获得RequestQueue和ImageLoader

使用自己写的在调用的时候需要注意强制造型

public class MyApplication extends Application {private RequestQueue queue;private ImageLoader imageLoader;private ImageCache imageCache;//注意在manifest中添加&#64;Overridepublic void onCreate() {super.onCreate();if (queue &#61;&#61; null) {queue &#61; Volley.newRequestQueue(this);}imageCache&#61;new ImageCache() {final LruCache cache&#61;new LruCache(20);&#64;Overridepublic void putBitmap(String arg0, Bitmap arg1) {cache.put(arg0, arg1);}&#64;Overridepublic Bitmap getBitmap(String arg0) {return cache.get(arg0);}}; imageLoader&#61;new ImageLoader(queue, imageCache); }public ImageLoader getImageLoader() {return imageLoader;}public RequestQueue getQueue() {return queue;}
}

2.2.3NewWorkImageView的使用

//因为我们将ImageLoader等的获得进行了封装&#xff0c;因此直接调用就可以了
//当然我们也可以直接写出&#xff0c;但是那样比较容易浪费空间&#xff0c;不建议那样写
networkImageView.setImageUrl(url, ((MyApplication)getApplication()).getImageLoader());

三、ImageRequest与NewWorkImageView

这里将他们两个的关系提出来&#xff1a;
值得一提的是ImageLoader与NewWorkImageView的内部都是使用了ImageRequest进行操作的&#xff0c;也就是说imageRequest是本质&#xff0c;这也是我将ImageRequest与NewWorkImageView放在一起讨论的原因。


推荐阅读
author-avatar
手机用户2502938137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有