Volley框架的学习
StringRequest(GET)
1、首先建立一个队列,放入Http请求(一个Activity中只需要一个Queue
2、建立一个StringRequest对象,需要三个参数
- 第一个参数是目标服务器的URL地址;
- 第二个参数是服务器成功响应的回调,返回response;
- 第三个参数是服务器响应失败的回调,可以打印具体error信息;
3.最后将StringRequest对象添加进请求队列
4.最后要加上访问权限
代码
mQueue = Volley.newRequestQueue(getApplicationContext());
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);
StringRequest(POST)
POST时,调用StringRequest中的getParams()
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;
}
};
JsonRequest的用法
- JsonRequest是一个抽象类包括两个子类JsonObjectRequest和JsonArrayRequest
- new 出一个对象
- 将request对象添加到Queue队列中
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("TAG", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
mQueue.add(jsonObjectRequest);
使用Volley加载网络图片
ImageRequest接收6个参数
- 图片的URL地址
- 图片成功请求的回调,将BitMap设置进ImageView中
- 设定宽度
- 设定高度 若为0,则是图片原大小
- 图片的颜色属性
- 图片请求失败的回调
最终将Request添加到Queue中
ImageRequest imageRequest = new ImageRequest(
"http://developer.android.com/images/home/aw_dac.png",
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageView.setImageBitmap(response);
}
}, 0, 0, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imageView.setImageResource(R.drawable.default_image);
}
});
mQueue.add(imageRequest);
ImageLoader
可以对图片进行缓存,过滤到重复的请求
- 创建RequestQueue对象
- 创建一个ImageLoader对象
- 获取一个ImageListener对象
- 调用ImageLoader的get()方法加载网络上的图片
ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
@Override
public Bitmap getBitmap(String url) {
return null;
}
});
第一个为Queue对象,第二个为Cache(缓存对象)
ImageListener listener = ImageLoader.getImageListener(imageView,
R.drawable.default_image, R.drawable.failed_image)
三个参数
- imageView控件
- 加载过程中显示的过渡图片
- 加载失败时显示的图片
调用ImageLoader.get()来加载图片
imageLoader.get("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", listener);
也可以设置参数
imageLoader.get("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",
listener, 200, 200);
使用imageCache对象,起到对图片的缓存作用
public class BitmapCache implements 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);
}
}
最后在imageloder中
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());