本文参考郭霖大神的笔记整理出来
用法:
普通字符串:
RequestQueue mQueue = Volley.newRequestQueue(context);
StringRequest stringRequest = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
mQueue.add(stringRequest);
如果需要发POST请求,只需重写StringRequest的Map<String, String> getParams()函数,把参数返回即可。
Json请求:
将字符串请求中的StringRequest替换为JsonObjectRequest 或JsonArrayRequest。相应的onResponse里的response参数类型会变成JSONObject和JSONArray
图片请求:
将字符串请求中的StringRequest替换为ImageRequest ,构造函数中,两个listener之间还有3个参数,分别是请求图片的宽度、高度和颜色属性(一般为Config.RGB_8888),相应的onResponse的response变成Bitmap。
ImageLoader用法:
使用步骤:
(1)创建一个RequestQueue对象。
(2) 创建一个ImageLoader对象。
(3) 获取一个ImageListener对象。
(4) 调用ImageLoader的get()方法加载网络上的图片。
RequestQueue mQueue = Volley.newRequestQueue(context);
ImageLoader imageLoader = new ImageLoader(mQueue, new 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);
}
});
ImageListener listener = ImageLoader.getImageListener(imageView,
R.drawable.default_image, R.drawable.failed_image);
imageLoader.get("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png", listener);
原理:
newRequestQueue()里创建一个HttpStack对象,根据版本的不同,如果操作系统版本号大于等于9,创建的是HurlStack实例,否则是HttpClientStack实例。前者内部使用HttpURLConnection,后者内部使用HttpClient。然后将HttpStack作为参数去创建Network对象。(Network屏蔽了具体的HttpStack选择),然后将Network传入RequestQueue构造函数创建一个RequestQueue对象。调用RequestQueue对象的start()方法。并将该RequestQueue对象作为newRequestQueue()函数的返回。RequestQueue的start方法主要做两件事:首先创建一个Cache线程。然后创建指定个数(默认4个)Network线程。即一共创建了5个线程。这些线程不断从队列里面取出Request,如果没有Request会一直堵塞。