Volley是一个比较热门的网络框架,那么如何使用它呢?下面是对它使用的总结:
首先在app目录下的build.gradle添加依赖:
compile 'com.android.volley:volley:1.0.0'
不管你想要用什么请求,或者是加载图片,都是跟着三个步骤走:(1)创建请求队列,(2)创建请求,(3)将请求添加到队列中去。
Get请求:步骤如上述,注意在创建请求时,要传入url,请求成功的监听,请求失败的监听。
//1.创建一个请求队列
final RequestQueue request = Volley.newRequestQueue(MainActivity.this);
//2.创建一个请求
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
tv_result.setText(response);
}
}, new Response.ErrorListener() {//发生异常
@Override
public void onErrorResponse(VolleyError error) {
tv_result.setText("加载错误");
}
});
//3.将创建的请求添加到请求队列中去
request.add(stringRequest);
Post请求:与Get请求不同的是,请求的第一参数是请求方法,并且可以在请求中的getParams方法中以Map对象添加参数
//1.创建一个请求队列
RequestQueue requestQueue = Volley.newRequestQueue(this);
//2.创建一个post请求
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
tv_result.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
tv_result.setText("加载失败" + error.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> mMap = new HashMap<>();
//添加参数
return super.getParams();
}
};
//3.将Post请求添加到请求队列中去
requestQueue.add(stringRequest);
Json请求:即返回的数据格式为Json,与Get相同,不过请求的对象不同,有JsonObject和JsonArray请求,根据需要做相应的请求。
//1.创建一个请求队列
final RequestQueue requestQueue = Volley.newRequestQueue(this);
//2.创建一个post请求
JsonObjectRequest jsonRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
tv_result.setText(response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
tv_result.setText("加载失败:" + error);
}
});
//3.将Post请求添加到请求队列中去
requestQueue.add(jsonRequest);
ImageRequest请求:步骤不变,ImageRequest的参数为:图片地址,请求成功监听,图片的最大宽度,图片的最大高度,图片的参数(位),请求失败监听(可再次回调中设置请求失败显示的图片)
//1.创建请求队列
RequestQueue request = Volley.newRequestQueue(MainActivity.this);
//2.创建请求
ImageRequest imageRequest = new ImageRequest(imgUrl, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
mImageView.setImageBitmap(response);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mImageView.setImageResource(R.mipmap.ic_launcher);
}
});
//3.将请求添加到请求队列中去
request.add(imageRequest);
ImageLoader请求:第一个参数为请求队列,第二个是缓存对象
//1.创建请求队列
RequestQueue request = Volley.newRequestQueue(MainActivity.this);
//2.创建一个请求
ImageLoader imageLoader = new ImageLoader(request,
new ImageLoader.ImageCache() {//图片缓存
@Override
public Bitmap getBitmap(String url) {
return null;
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
}
);
//3.加载图片
ImageLoader.ImageListener listener = imageLoader.getImageListener(mImageView,
R.mipmap.ic_launcher, R.mipmap.ic_launcher);
imageLoader.get(imgUrl, listener);
缓存对象可以自己定义,继承ImageCache,然后实现它的get和set方法,并设置内存的大小,贴下代码:
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;//10m
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
Volley框架还提供了一个控件:NetworkImageView,它的用法与普通的ImageView类似,不过它可以结合ImageLoader请求,可以设置请求错误的默认图片、和没有请求时的默认图片:
//1.创建请求队列
RequestQueue request = Volley.newRequestQueue(MainActivity.this);
ImageLoader imageLoader=new ImageLoader(request,new BitmapCache());
//设置默认图片
mNetImageView.setDefaultImageResId(R.mipmap.ic_launcher);
mNetImageView.setErrorImageResId(R.mipmap.ic_launcher);
//加载图片
mNetImageView.setImageUrl(imgUrl,imageLoader);
Volley框架的基本用法差不多有这些,后续还会试着去读读它的源码理解理解。