compile 'eu.the4thfloor.volley:com.android.volley:2015.05.28'
RequestQueue requestQueue; requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest("", new Response.Listener<String>() { @Override public void onResponse(String response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } });
构造方法:
第一个参数: 请求地址
第二个参数: 请求成功监听器
第三个参数: 请求失败
StringRequest(String url, Listener<String> listener, ErrorListener errorListener)(GET请求)
第一个参数: 请求方式
第二个参数: 请求地址
第三个参数: 请求成功监听器(数据返回就在这里,不论是正确的仍是错误的)
第四个参数: 请求失败(指网络失败,没有返回数据,网络中断等缘由形成的请求失败)
StringRequest(int method, String url, Listener<String> listener,ErrorListener errorListener)
requestQueue.add(stringRequest);
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { //服务端响应成功,返回数据
Log.d("TAG", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //服务端响应失败
Log.e("TAG", error.getMessage(), error); } });
1. 建立一个RequestQueue对象。html
2. 建立一个Request对象。android
3. 将Request对象添加到RequestQueue里面。json
不一样的只是名称和构造函数不一样罢了。数组
(1)ImageRequest 构建对象:缓存
ImageRequest imageRequest = new ImageRequest( "http://developer.android.com/images/home/aw_dac.png", new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { imageView.setImageBitmap(response); } }, 0, 0, Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { imageView.setImageResource(R.drawable.default_image); } });
构造函数为:
ImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight,Config decodeConfig, Response.ErrorListener errorListener)
六个参数:服务器
第一个参数:url 图片的URL地址网络
第二个参数: 图片请求成功的回调ide
第3、第四个参数:指定的网络图片的最大宽度和最大高度,若是宽高度与指定不符,则进行压缩,若是都设置为0 ,就是不会压缩函数
第五个参数:指定图片的颜色属性工具
第六个参数:图片请求失败的回调
(2) 将此对象添加到消息队列中便可。
(四)ImageLoader
ImageLoader要比ImageRequest更加高效,由于它不只能够帮咱们对图片进行缓存,还能够过滤掉重复的连接,避免重复发送请求;
因为ImageLoader已经不是继承自Request的了,因此其用法也和咱们以前学到的内容有所不一样,总结起来大体能够分为如下四步:
1. 建立一个RequestQueue对象。
2. 建立一个ImageLoader对象。
3. 获取一个ImageListener对象。
4. 调用ImageLoader的get()方法加载网络上的图片。
long l = Runtime.getRuntime().totalMemory()/8 ; final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>((int) l) {//此处l是上面获取的程序当前程序的8分之一
@Override protected int sizeOf(String key, Bitmap value) {//返回每一个缓存的大小
return value.getRowBytes() * value.getHeight() / 1024; } };// 建立系统自带的缓存,缓存最大值为内存最大值的1/8
2,新建ImageLoader对象
构造函数:
两个参数:
第一个参数就是RequestQueue对象
第二个参数是一个ImageCache对象
ImageLoader imageLoader; imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { @Override public Bitmap getBitmap(String url) {//从缓存中获取图片,是在 get 方法执行的时候才来,由于须要 url
LogUitls.e("volley", "获取缓存图片"); Bitmap bitmap = lruCache.get(url); return bitmap; } @Override public void putBitmap(String url, Bitmap bitmap) {//往缓存中存放图片,这里的URL值是什么?缓存地址仍是上面的下载地址?
LogUitls.e("volley", "将图片存放到缓存中"); lruCache.put(url, bitmap); } });
(3)get方法
get方法参数:
第一个参数:图片的URL地址
第二个参数:ImageListener对象
ImageListener构造函数参数:
第一个参数:要显示图片的控件
第二个参数:加载图片的过程当中显示的图片
第三个参数: 加载图片失败的状况下显示的图片
imageLoader.get("http://www.baidu.com/img/bd_logo1.png", ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher));
ImageLoader.getImageListener的缺点:仅适合没有复用控件的时候使用, listview 中使用会致使错乱,由于没有判断返回的图片
NetworkImageView是一个自定义控制,它是继承自ImageView的,具有ImageView控件的全部功能,而且在原生的基础之上加入了加载网络图片的功能。
NetworkImageView控件的用法要比前两种方式更加简单,大体能够分为如下五步:
1. 建立一个RequestQueue对象。
2. 建立一个ImageLoader对象。
3. 在布局文件中添加一个NetworkImageView控件。4. 在代码中获取该控件的实例。
5. 设置要加载的图片地址。
<com.android.volley.toolbox.NetworkImageView android:id="@+id/network_image_view" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center_horizontal"
/>
networkImageView.setDefaultImageResId(R.drawable.default_image); networkImageView.setErrorImageResId(R.drawable.failed_image); networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", imageLoader);