为什么要使用Volley框架
开发android应用很多时候都要涉及网络操作,Android SDK中提供了HttpClient 和 HttpUrlConnection两种方式用来处理网络操作,但当应用比较复杂的时候需要我们编写大量的代码处理很多东西:图像缓存,请求的调度等等;
而Volley框架就是为解决这些而生的,它与2013年Google I/O大会上被提出:使得Android应用网络操作更方便更快捷;抽象了底层Http Client等实现的细节,让开发者更专注与产生RESTful Request。另外,Volley在不同的线程上异步执行所有请求而避免了阻塞主线程。
Volley到底有哪些特点呢?
- 自动调度网络请求
- 多个并发的网络连接
- 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致
- 支持请求优先级
- 支持取消请求的强大API,可以取消单个请求或多个
- 易于定制
- 健壮性:便于正确的更新UI和获取数据
- 包含调试和追踪工具
如何使用Volley
- git clone https://android.googlesource.com/platform/frameworks/volley 或者 https://github.com/mcxiaoke/android-volley
或者到Maven下载http://central.maven.org/maven2/com/mcxiaoke/volley/library/1.0.19/library-1.0.19.jar
Volley框架的基本使用
首先我们需要创建一个RequestQueue requestqueue的请求队列,然后构建自己所需要的StringRequest/JsonObjectRequest,最后通过requestqueue.add(stringrequest);的方法把请求加入请求队列中。
一、基本的使用
Volley框架的get请求
1.请求队列的创建
RequestQueue requestQueue = Volley.newRequestQueue(this);
2.构造请求的方法和参数
string url = " ";
StringRequest stringRequest = new StringRequest(Method.GET, url, new Listener<String>() {
@Override
public void onResponse(String response) {
// TODO 自动生成的方法存根
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO 自动生成的方法存根
}
});
3.将请求加入请求的队列中
mRequestQueue.add(stringRequest);
Volley框架的post请求
1.请求队列的创建
RequestQueue requestQueue = Volley.newRequestQueue(this);
2.构造请求的方法
string url = " ";
StringRequest stringRequest = new StringRequest(Method.GET, url, new Listener<String>() {
@Override
public void onResponse(String response) {
// TODO 自动生成的方法存根
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO 自动生成的方法存根
}
});
3.请求参数的添加
a.自定义携带参数
HashMap<String, String> hashMap = new HashMap<String,String>();
hashMap.put(key, value);
JSONObject jsonObject = new JSONObject(hashMap);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonRequest, listener, errorListener);
b.使用volley框架自带的进行参数携带
String url = "http://hxyj.cwwic.cn/wap/api_cs/user.php?action=login";
mContext = this;
mRequestQueue = Volley.newRequestQueue(mContext);
mStringRequest = new StringRequest(Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println("请求结果:" + response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("请求错误:" + error.toString());
}
}) {
// 携带参数,当请求的时候会自动调用,进行参数的携带
@Override
protectedHashMap<String, String> getParams()
throws AuthFailureError {
HashMap<String, String>hashMap = new HashMap<String, String>();
hashMap.put("un", "411111222");
hashMap.put("pw", "180034111");
returnhashMap;
}
};
mRequestQueue.add(mStringRequest);
3.将请求加入请求的队列中
mRequestQueue.add(stringRequest);
使用ImageRequest进行网络图片加载
4.网络图片的加载
String urlString = "";
ImageRequestrequest = new ImageRequest(urlString, new Listener<Bitmap>() {
@Override
publicvoid onResponse(Bitmap response) {
//TODO 自动生成的方法存根
iamgeView.setImageBitmap(response);
}
}, 0,0, Config.RGB_565, new Response.ErrorListener() {
//0,0表示图片按照原来大小显示
@Override
publicvoid onErrorResponse(VolleyError error) {
//TODO 自动生成的方法存根
iamgeView.setBackgroundResource(R.id.icon);
}
});
MyApplication.getHttpQueues().add(request);
使用ImageLoder进行图片的下载、StringurlString = "";
ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(),new BitmapCache());
ImageListener listener = ImageLoader.getImageListener(iamgeView, R.id.action_bar, R.id.action_bar);
loader.get(urlString,listener);
另建立一个类对其进行处理
importandroid.graphics.Bitmap;
importandroid.support.v4.util.LruCache;
importcom.android.volley.toolbox.ImageLoader.ImageCache;
publicclass BitmapCache implements ImageCache {
public LruCache<String, Bitmap>cache ;
publicint max =10*1024*1024;//限制大小,超过此大小,缓存中自动清除
public BitmapCache(){
cache =new LruCache<String,Bitmap>(max){
@Override
protectedint sizeOf(String key, Bitmap value) {
// TODO自动生成的方法存根
returnvalue.getRowBytes()*value.getHeight();//获取文件的大小
}
};
}
public android.graphics.BitmapgetBitmap(Stringurl) {
//TODO自动生成的方法存根
returncache.get(url);
}
@Override
publicvoid putBitmap(String url, android.graphics.Bitmap bitmap) {
//TODO自动生成的方法存根
cache.put(url,bitmap);
}
}
源代码地址:http://download.csdn.net/detail/qq_21813987/9466850