android网络请求Volley框架的使用

时间:2021-12-08 15:28:40

为什么要使用Volley框架

 

开发android应用很多时候都要涉及网络操作,Android SDK中提供了HttpClient 和 HttpUrlConnection两种方式用来处理网络操作,但当应用比较复杂的时候需要我们编写大量的代码处理很多东西:图像缓存,请求的调度等等;

而Volley框架就是为解决这些而生的,它与2013年Google I/O大会上被提出:使得Android应用网络操作更方便更快捷;抽象了底层Http Client等实现的细节,让开发者更专注与产生RESTful Request。另外,Volley在不同的线程上异步执行所有请求而避免了阻塞主线程。

android网络请求Volley框架的使用

Volley到底有哪些特点呢?

  1. 自动调度网络请求
  2. 多个并发的网络连接
  3. 通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致
  4. 支持请求优先级
  5. 支持取消请求的强大API,可以取消单个请求或多个
  6. 易于定制
  7. 健壮性:便于正确的更新UI和获取数据
  8. 包含调试和追踪工具

 

如何使用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