1.简介
1)它是2013年Goole I/O上发布的一款网络框架,基于android平台,能使网络通讯更快,
更简单,更健全
优点:
1)网络请求额排序
2)网络请求的优先级处理
3)缓存
4)多级别取消处理
5)和activity生命周期联动(Activity结束时取消所有网络请求)
6)非常适合去进行数据量不大,但是通讯频繁的网络操作
7)可以自定义扩展
缺点:
对于大数据量的网络操作,比如说下载等,volley表现的并不好
2.下载地址:
1)官网地址:https://android.googlesource.com/platform/frameworks/volley
2)jar包下载地址:http://download.csdn.net/detail/sinyu890807/7152015
3.API
1)请求String类型数据:StringRequest
2)请求json数据jsonRequest:
JsonObjectRequest
JsonArrayRequest
3)请求图片数据:ImageRequest
4.使用步骤:
1)导入jar包
2)添加联动权限:<uses-permission android:name="android.permission.INTERNET" />
3)网络请求:
(1)get请求:
// get请求
bt_volley_get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 网络数据地址
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
// 创建一个请求
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
// 设置显示结果
tv_volley_result.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
tv_volley_result.setText("请求失败");
}
});
// 将请求添加到请求队列中
requestQueue.add(stringRequest);
}
});
(2)post请求
// post请求
bt_volley_post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 网络数据地址
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
// 创建一个请求
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
// 设置显示结果
tv_volley_result.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
tv_volley_result.setText("加载失败");
}
}){
// 添加请求参数的方法
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<String, String>();
// map.put("value1","parame1");
return map;
}
};
// 将请求添加到请求队列中
requestQueue.add(stringRequest);
}
});
(3)请求json数据
// 请求json数据
bt_volley_json.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 网络数据地址
String url = "http://api.m.mtime.cn/PageSubArea/TrailerList.api";
// 创建一个json请求
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
// 设置显示结果
tv_volley_result.setText(jsonObject.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
tv_volley_result.setText("失败"+volleyError.toString());
}
});
// 将json请求添加到请求队列中
requestQueue.add(jsonObjectRequest);
}
});
4)图片加载
(1)
ImageRequest加载图片
// ImageRequest加载图片
bt_volley_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 网络图片地址
String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
// 创建一个图片请求
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
iv_volley.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
iv_volley.setImageResource(R.drawable.atguigu_logo);
}
});
// 将图片请求添加到请求队列中
requestQueue.add(imageRequest);
}
});
(2)
ImageLoader加载图片
// ImageLoader加载图片
bt_volley_imageloader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 创建一个带缓存的ImageLoader
ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());
// 获取图片的监听:参数1:用于显示图片的ImageView控件;参数2:加载图片的过程中显示的图片
// 参数3:加载图片失败的情况下显示的图片
ImageLoader.ImageListener imageListener = imageLoader.getImageListener(iv_volley, R.drawable.atguigu_logo, R.drawable.atguigu_logo);
// 网络图片地址
String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
// 加载图片
imageLoader.get(url, imageListener);
}
});
缓存类
package com.atguigu.android.volley;
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader;
/**
* Created by Administrator on 2016/10/13.
*/
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
(3)
NetworkImageView加载图片
布局:com.android.volley.toolbox.NetworkImageView
// networkimageview显示图片
bt_volley_networkimageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(VolleyActivity.this);
// 创建一个带缓存的ImageLoader
ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());
// 设置默认图片
iv_volley_network.setDefaultImageResId(R.drawable.atguigu_logo);
// 设置请求失败后的图片
iv_volley_network.setErrorImageResId(R.drawable.atguigu_logo);
String url = "http://img5.mtime.cn/mg/2016/10/11/160347.30270341.jpg";
// 设置显示的图片
iv_volley_network.setImageUrl(url, imageLoader);
}
});