初窥Android网络通讯库Volley
今天作者使用了下Volley进行网络请求,发现这个网络通讯库很简洁,非常好用。
首先介绍下Volley
Volley是谷歌在2013年Google I/O大会上推出了一个新的网络通信框架。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,
既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性
能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,
Volley的表现就会非常糟糕。
介绍完Volley,我们就来说说Volley的使用吧。
前面也说过Volley的使用是非常简单的,我们就从最简单的http通信开始讲吧。
要使用Volley进行网络请求,可以分为三步:
1).创建RequestQueue对象(注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。
RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一
个需要和网络交互的Activity中创建一个RequestQueue对象就足够了)
RequestQueue queue=Volley.newRequestQueue(this);
2).创建一个Request对象(Request是一个接口,Volley框架为我们提供了三个实现类:StringRequest,JsonRequest,ImageRequest)
3).将Request对象加到RequestQueue队列中
queue.add(request);
那么接下来我们就来介绍各个Request实现类的使用了:
1、StringRequest--进行http请求,响应返回一段String字符串
创建一个StringRequest对象:
StringRequest request = new StringRequest(Method.POST, NetUtils.PATH, new Listener<String>() { @Override public void onResponse(String msg) { pd.dismiss(); if (msg.equals(SUCCESS)) { // 说明登录成功 tv_status.setText("已登录"); } else if (msg.equals(FAIL)) { // 说明登录失败 tv_status.setText("登录失败,请检查用户名密码是否正确"); } } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (error.networkResponse != null) { int code = error.networkResponse.statusCode; System.out.println("网络错误了" + code); } Toast.makeText(getApplicationContext(), "网络错误", 0).show(); pd.dismiss(); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> map=new HashMap<String, String>(); map.put("username",username); map.put("psw", psw); return map; } }; queue.add(request);
可以看到new StringRequest(method, url, listener, errorListener)的构造方法中有四个参数,第一个参数是请求的方式,可以通过内部类Method.GET或者Method.POST来选择,第二个参数是请求的url,
第三个参数是请求成功的监听器,当请求成功会回调里面的onResponse方法,第四个参数是请求失败(包括404,500,以及请求超时等错误)的监听器,当请求失败会回调里面的onErrorResponse方法。
这里值得我们注意的是,GET请求是,请求参数可以通过写在url后面带到服务器,但是POST请求就不行了。那我们来看下,StringRequest中有没有setParam的设置请求参数的方法,很遗憾是没有的。
那么在进行POST请求的时候,我们要如何将请求参数带到服务器呢。分析RequestQueue源码可以发现,当Request对象请求方式时POST的时候,RequestQueue会尝试调用Request总的getParams方法
获得请求参数,故我们只需要重写StringRequest的getParams方法返回一个map即可将请求参数带到服务器了~~~~
由于作者只是使用到StringRequest,所以先说到这里,以后会慢慢更新。。。。。。。
浙公网安备 33010602011771号