简介
Volley意为齐射、并发的意思,是Google在2013年发布的Android平台上的网络通信库
特点
- 网络通信更快,更简单(高效地Get、Post请求方式)
- 网络图片加载与缓存
- 请求排序(建立了请求队列)
- 多级别取消请求
- 可以与Activity的生命周期进行关联
注意:不适合数据的上传与下载
使用
网络请求队列的建立与取消
MyApplication.java
package com.example.demo;
import android.app.Application;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
/**
* 创建全局的请求队列
*/
public class MyApplication extends Application {
public static RequestQueue mRequestQueue;
@Override
public void onCreate() {
super.onCreate();
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
public static RequestQueue getRequestQueue(){
return mRequestQueue;
}
}
Get与Post请求方式
有三个请求对象StringRequest、JsonObjectRequest、JsonArrayRequest,其中StringRequest包含了另外两个对象
Get请求方式
/**
* 使用StringRequest发送Get请求
*/
String url = "http://xxx/get?name=zhangsan&sex=male";
StringRequest request = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
request.setTag("Get");
MyApplication.getRequestQueue().add(request);
/**
* 使用JsonObjectRequest发送Get请求
*/
String url = "http://xxx/get?name=zhangsan&sex=male";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url,
null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
request.setTag("Get");
MyApplication.getRequestQueue().add(request);
Post请求方式
/**
* 使用StringRequest发送Post请求
*/
String url = "http://xxx";
StringRequest request = new StringRequest(Request.Method.POST,url,
new Response.Listener<String>(){
@Override
public void onResponse(String s) {
}
},new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}){
/**
*
* 用户在使用Post请求方式中参数的传递
*/
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> hashMap = new HashMap<>();
hashMap.put("name","zhangsan");
hashMap.put("sex","male");
return hashMap;
}
};
request.setTag("Post");
MyApplication.getRequestQueue().add(request);
/**
* 使用JsonObjectRequest发送Post请求
*/
String url = "http://xxxx";
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("name","zhangsan");
hashMap.put("sex","male");
JSONObject object = new JSONObject(hashMap);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
request.setTag("Post");
MyApplication.getRequestQueue().add(request);
与Activity的生命周期相关联
/**
* 将Volley与Activity的生命周期进行关联
*/
@Override
protected void onStop() {
super.onStop();
/**
* 通过给定的TAG值,将指定的队列全部关闭
*/
MyApplication.getRequestQueue().cancelAll("Post");
}
网络图片加载
String url = "https://www.baidu.com/img/bdlogo.png";
ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
request.setTag("Get");
MyApplication.getRequestQueue().add(request);
网络图片加载并缓存
package com.example.demo;
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.toolbox.ImageLoader;
public class BitmapCache implements ImageLoader.ImageCache {
LruCache<String,Bitmap> cache;
int max = 10*1024*1024;
public BitmapCache(){
cache = new LruCache<String,Bitmap>(max){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes()*value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String s) {
return cache.get(s);
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
cache.put(s,bitmap);
}
}
方式一
String url = "https://www.baidu.com/img/bdlogo.png";
ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());
ImageListener listener = ImageLoader.getImageListener(iv,R.drawable.default,R.drawable.error)
imageLoader.get(url,listener);
方式二
String url = "https://www.baidu.com/img/bdlogo.png";
ImageLoader imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new BitmapCache());
NetworkImageView networkImageView=(NetworkImageView)findViewById(R.id.img); networkImageView.setDefaultImageResId(R.drawable.default); networkImageView.setErrorImageResId(R.drawable.error); networkImageView.setImageUrl(url,imageLoader);