您的位置:首页 > 理论基础 > 计算机网络

android网络请求Volley框架的使用

2016-03-19 21:26 686 查看


为什么要使用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
protected
HashMap<String, String> getParams()
throws AuthFailureError {
HashMap<String, String>
hashMap = new HashMap<String, String>();
hashMap.put("un", "411111222");
hashMap.put("pw", "180034111");
return
hashMap;
}
};
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;
 
public
class
BitmapCache implements ImageCache {
   public LruCache<String, Bitmap>
cache ;
   public
int
max =10*1024*1024;//限制大小,超过此大小,缓存中自动清除
   public BitmapCache(){
      cache =
new LruCache<String,Bitmap>(max){
        
@Override
         protected
int
sizeOf(String
key, Bitmap value) {
           
// TODO自动生成的方法存根
            return
value.getRowBytes()*value.getHeight();//获取文件的大小
         }
      };
   }
   public  android.graphics.BitmapgetBitmap(String
url) {
      //
TODO自动生成的方法存根
      return
cache.get(url);
   }
 
   @Override
   public
void
putBitmap(String
url, android.graphics.Bitmap bitmap) {
      //
TODO自动生成的方法存根
      cache.put(url,
bitmap);
   }

}
源代码地址:http://download.csdn.net/detail/qq_21813987/9466850
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息