Android 网络连接:Volley(齐射)之ImageRequest与NetworkImageView网络图片下载
来源:互联网 发布:手机强制删除文件软件 编辑:程序博客网 时间:2024/06/06 02:49
一、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<Bitmap>() { @Override public void onResponse(Bitmap arg0) { imgview.setImageBitmap(arg0); } }, 0, 0, Config.RGB_565, new ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { } }); //注意最后将请求放入请求队列中 queue2.add(imgrequest);
二、NewWorkImageView
NewWorkImageView的使用调用了Volley的ImageLoader、ImageCache、Lrucache,看起来比较麻烦,当然我们也可以直接使用google原代码中给出的单例(后面代码中的MySingleton,这里进行单例的主要目的是不要有过多的请求队列和创建多个ImageLoader),也可以自己写一个封装类来获得,
2、1使用步骤
1、首先在布局中添加networkImageView(注意写全包名)
<com.android.volley.toolbox.NetworkImageView android:id="@+id/networkImageview" android:layout_width="400dp" android:layout_height="400dp" android:layout_gravity="center_horizontal" />
2、创建ImageLoader,对它进行单例(其中涉及到ImageCache、Lrucache)
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 = context; mRequestQueue = getRequestQueue(); mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() { //写在ImageLoader内部,证明LruCache是属于它的那个 private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20); @Override public Bitmap getBitmap(String url) { return cache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { cache.put(url, bitmap); } }); } //单例模式,添加synchronized 防止线程过多时出问题 public static synchronized MySingleton getInstance(Context context) { if (mInstance == null) { mInstance = new MySingleton(context); } return mInstance; } public RequestQueue getRequestQueue() { //在没有请求的情况下才创建,否则不进行创建,调用没有被回收的 if (mRequestQueue == null) { mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); } return mRequestQueue; } public <T> void addToRequestQueue(Request<T> 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中添加<application name+包名+类名> @Override public void onCreate() { super.onCreate(); if (queue == null) { queue = Volley.newRequestQueue(this); } imageCache=new ImageCache() { final LruCache<String, Bitmap> cache=new LruCache<String, Bitmap>(20); @Override public void putBitmap(String arg0, Bitmap arg1) { cache.put(arg0, arg1); } @Override public Bitmap getBitmap(String arg0) { return cache.get(arg0); } }; imageLoader=new ImageLoader(queue, imageCache); } public ImageLoader getImageLoader() { return imageLoader; } public RequestQueue getQueue() { return queue; }}
2.2.3NewWorkImageView的使用
//因为我们将ImageLoader等的获得进行了封装,因此直接调用就可以了//当然我们也可以直接写出,但是那样比较容易浪费空间,不建议那样写networkImageView.setImageUrl(url, ((MyApplication)getApplication()).getImageLoader());
三、ImageRequest与NewWorkImageView
这里将他们两个的关系提出来:
值得一提的是ImageLoader与NewWorkImageView的内部都是使用了ImageRequest进行操作的,也就是说imageRequest是本质,这也是我将ImageRequest与NewWorkImageView放在一起讨论的原因。
- Android 网络连接:Volley(齐射)之ImageRequest与NetworkImageView网络图片下载
- Android-Volley网络通信框架(ImageRequest,ImageLoader,NetWorkImageView)
- Android 网络连接:Volley(齐射)之简单使用
- Android Volley框架(二):ImageRequest、ImageLoader、NetworkImageView
- 谷歌官网的Volley网络框架实战②--ImageRequest、ImageLoader、NetworkImageView加载图片
- Android网络图片下载框架—Volley
- Volley(二) ImageRequest、Imageloader、NetworkImageView加载图片
- Volley之ImageLoader与NetworkImageView
- android网络连接Volley
- Volley学习(三)ImageRequest、ImageLoader、NetworkImageView源码简读
- Volley中ImageRequest、ImageLoader、NetworkImageView的简单使用
- Android-使用Volley 连接网络
- Android网络连接---Google网络库Volley
- Unity游戏之网络图片下载与加载
- 网络图片下载与缓存
- 网络通信之图片下载
- Android高级之Volley框架(三):ImageRequest、ImageLoader、NewworkImageView的使用
- Android网络操作之Volley
- Spring-data-redis(Version 1.6.0.RC1)中文版
- C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
- CUDA二维矩阵加法
- mysql--数据类型和常用字段属性总结
- iOS segment控件
- Android 网络连接:Volley(齐射)之ImageRequest与NetworkImageView网络图片下载
- erl_tree-haffman Tree 哈夫曼树
- EasyShell:eclipse的插件
- GOF23设计模式之 单例模式
- 为什么ping不通某网站,但是却可以访问该网站?
- 类与对象
- LeetCode_single-number
- xelatex 字体问题
- Android基础控件Chronometer计时器控件