Volley请求的请求种类:
1、StringRequest:返回结果是一个字符串:
//1.创建一个请求
String url = "";
StringRequest stringRequest = new StringRequest(url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
//2.创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//3.发起请求
requestQueue.add(stringRequest);
post请求:
StringRequest stringRequest = new StringRequest(Method.POST,url,listener,errorListener) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("params1", "value1");
map.put("params2", "value2");
return map;
}
};
2、JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest。
JsonObjectRequest:返回结果是一个jsonObject:
//1.创建一个请求
//null 表示get请求
JSONObject jsonRequest = null;
String url = "";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonRequest,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
//2.创建请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//3.发起请求
requestQueue.add(jsonObjectRequest);
3、JsonArrayRequest:返回结果是一个jsonArray:
//1.创建请求
String url = "";
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.i( "tag", "length:" + response.length());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
//2.创建请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//3.发起请求
requestQueue.add(jsonArrayRequest);
4、ImageRequest:返回结果是一个Bitmap:
//1.创建请求 ,maxWidth,maxHeight为0时会下载原图
int maxWidth = 0;
int maxHeight = 0;
String url = "" ;
ImageRequest imageRequest = new ImageRequest(url,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
mImageView.setImageBitmap(response);
}
},
maxWidth, maxHeight, Bitmap.Config.ARGB_8888,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mImageView.setImageBitmap(R.drawable.error);
}
}
);
//2.创建请求
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//发起请求
requestQueue.add(imageRequest);
ARGB_8888:每个图片像素占据4个字节的大小,RGB_565:每个图片像素占据2个字节大小。
5、自定义一个Request (fastjson + Request = FastJsonRequest);
6、NetWorkImageView 直接可以加载网络图片的ImageView,NetworkImageView是一个自定义控制,它是继承自ImageView的:
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/network_image_view"
android:layout_width="200dp"
android:layout_height="200dp"
/>
String url = "";
//请求队列
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
//自定义的内存缓存
ImageLoader.ImageCache cache = new MyImageCache();
//图片下载器
ImageLoader imageLoader = new ImageLoader(requestQueue, cache);
//下载图片
networkImageView.setDefaultImageResId(R.drawable.default_image); //加载中显示的图片
networkImageView.setErrorImageResId(R.drawable.failed_image);//加载失败时显示的图片
networkImageView.setImageUrl(url,imageLoader);//目标图片的URL地址
public class MyImageCache implements ImageLoader.ImageCache{
private int maxSize = 4 * 1024 * 1024 ;//最大缓存 4M
private LruCache<String,Bitmap> mLruCache = new LruCache<String,Bitmap>(maxSize){
@Override
protected int sizeOf(String key, Bitmap value) {
//需要复写这个方法,统一单位
return value.getByteCount();
}
};
@Override
public Bitmap getBitmap(String url) {
return mLruCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mLruCache.put(url,bitmap);
}
}
注意:
网络权限:
<uses-permission android:name="android.permission.INTERNET" />
扩展
1、自定义GsonRequest
public class GsonRequest<T> extends Request<T> {
private final Listener<T> mListener;
private Gson mGson;
private Class<T> mClass;
public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener,ErrorListener errorListener) {
super(method, url, errorListener);
mGson = new Gson();
mClass = clazz;
mListener = listener;
}
public GsonRequest(String url, Class<T> clazz, Listener<T> listener,ErrorListener errorListener) {
this(Method.GET, url, clazz, listener, errorListener);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
return Response.success(mGson.fromJson(jsonString, mClass),HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
@Override
protected void deliverResponse(T response) {
mListener.onResponse(response);
}
}