一、Volley简介。
1.Volley起源。
Volley是2013年Google I/O上发布的一款网络框架,基于Android平台,能使网络通信更快,更简单,更健全。
2.Volley框架的优点。
1)网络请求的排序(scheduling)。
2)网络请求的优先级处理。
3)缓存。
4)多级别取消请求。
5)和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)。
6)非常适合去进行数据量不大,但通信频繁的网络操作。
7)可以自定义拓展。
3.Volley框架的缺点
对于大数据量的网络操作,比如说下载文件等,Volley的表现不好。
4.项目地址
1)官网地址:https://android.googlesource.com/platform/frameworks/volley
2) jar包下载地址:http://download.csdn.net/detail/sinyu890807/7152015
二、Volley的基本使用
1.Volley的API
1)请求String类型数据:StringRequest
2)请求JSON数据:JsonRequest
a)JsonObjectRequest
b)JsonArrayRequest
3)请求图片数据:ImageRequest
2.Volley使用步骤
1)导入jar包
2)添加联网权限
<uses-permission android:name="android.permission.INTERNET" />
3)ApI的使用
三、Volley的案例
1.网络请求
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);
}
});
2.图片加载
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);
}
});
/**
* 缓存类
*/
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加载图片
// 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);
}
});
看到此,是不是接的EventBus的简单使用是不是很简单,谢谢浏览!