- 官方文档:Volley 概览
Volley 是一个可让 Android 应用更轻松、(最重要的是)更快捷地联网的 HTTP 库
一、Get型请求
1.创建网络请求队列
RequestQueue queue = Volley.newRequestQueue(thisContext);
2.设置 RequestQueue
String UrlLogin = "......";//请求url
StringRequest stringRequest = new StringRequest(
Request.Method.GET, UrlLogin, new Response.Listener < String > () {
@Override public void onResponse(String response) {
/**
** 成功后操作
**/
}
},
new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError error) {
Log.d(TAG, error.getMessage());
/**
** 失败后操作
**/
}
}) ;
3.将请求加入请求队列
queue.add(stringRequest);
二、Post型请求
1.创建网络请求队列
RequestQueue queue = Volley.newRequestQueue(thisContext);
2.设置 RequestQueue
String UrlLogin = "......";//请求url
StringRequest stringRequest = new StringRequest(
Request.Method.POST, UrlLogin, new Response.Listener < String > () {
@Override public void onResponse(String response) {//成功后操作
/**
** 成功后操作
**/
}
},
new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError error) {
//失败后操作
Log.d(TAG, error.getMessage());
}
}) {
@Override protected Map < String,String > getParams() throws AuthFailureError {
//设置POST请求时,需向服务器传传递的数据
Map < String,String > map = new HashMap < >();
map.put("is_ajax", "1");
map.put("data[username]", username);
map.put("data[password]", password);
return map;
}@Override public Map < String,String > getHeaders() throws AuthFailureError {
//设置请求头headers
Map < String,String > headers = new HashMap < >();
headers.put("Content-Type", "application/x-www-form-urlencoded");
return headers;
}
};
3.将请求加入请求队列
queue.add(stringRequest);
三、通过图片url请求图片资源
1.创建网络请求队列
RequestQueue queue = Volley.newRequestQueue(thisContext);
String imageUrl= "";//请求url
RequestQueue mQueue = Volley.newRequestQueue(thisContext);
ImageRequest imageRequest = new ImageRequest(
imageUrl,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageHead.setImageBitmap(response);
}}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imageHead.setImageResource(R.drawable.no_image_head);
}
});
mQueue.add(imageRequest);
3.将请求加入请求队列
mQueue.add(imageRequest);
四、封装成MyApplication
一般一个手机app一个网络请求队列,然后放入Application,全局、全生命周期调用
public class MyApplication extends Application {
//ImageLoader显示图片过程中的参数
private static DisplayImageOptions mLoaderOptions;
//Volley网络请求的队列对象
private static RequestQueue mQueue;
@Override
public void onCreate() {
super.onCreate();
//初始化ImageLoader
initImageLoader(getApplicationContext());
//初始化Volley的队列对象
mQueue = Volley.newRequestQueue(getApplicationContext());
Log.v("volley","初始化Volley的队列对象");
}
public static void initImageLoader(Context context) {
//初始化一个ImageLoaderConfiguration配置对象
ImageLoaderConfiguration config = new ImageLoaderConfiguration.
Builder(context).
memoryCacheExtraOptions(480, 800). // max width, max height,即保存的每个缓存文件的最大长宽
denyCacheImageMultipleSizesInMemory().
threadPriority(Thread.NORM_PRIORITY - 2).
diskCacheFileNameGenerator(new Md5FileNameGenerator()).
tasksProcessingOrder(QueueProcessingType.FIFO).
build();
//用ImageLoaderConfiguration配置对象完成ImageLoader的初始化,单例
ImageLoader.getInstance().init(config);
//显示图片过程中的参数
mLoaderOptions = new DisplayImageOptions.Builder().
showImageOnLoading(R.drawable.no_image).//正加载,显示no_image
showImageOnFail(R.drawable.no_image).//加载失败时
showImageForEmptyUri(R.drawable.no_image).//加载的Uri为空
imageScaleType(ImageScaleType.EXACTLY_STRETCHED).
cacheInMemory(true).//是否进行缓冲
cacheOnDisk(true).
considerExifParams(true).
build();
}
public static RequestQueue getHttpQueue() {
return mQueue;
}
public static DisplayImageOptions getLoaderOptions() {
return mLoaderOptions;
}
//Volley请求,传入消息编号Tag。将request请求放入队列中缓存
public static void addRequest(Request request, Object tag) {
request.setTag(tag);
request.setRetryPolicy(new DefaultRetryPolicy(10000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Log.v("volley","传入消息编号Tag。将request请求放入队列中缓存");
mQueue.add(request);
}
// 通过消息编号在队列中删除请求
public static void removeRequest(Object tag) {
mQueue.cancelAll(tag);
}
}