我们在andorid开发时,基本都是要使用网络通信,网络通信中,HttpURLConnection,HttpClient这两个类很常见,基本上有网络通信

的地方就有他们,但是当我们多次使用时,这两个类还是比较复杂的,特别是HttpClient,因此Volley就应运而生了。

除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操

作,而对于大数据量的网络操作,我们是不会使用Volley的。(Volley的使用是需要导入Volley包的)


一:StringRequest的用法---请求一段普通文本消息

StringRequest的使用分三步走:

1)创建一个RequestQueue对象(请求队列)

2)创建一个StringRequest对象

3)把StringRequest对象添加到RequestQueue(请求队列)中

这样就完成了StringRequest的使用,下面是详细代码

RequestQueue queue = Volley.newRequestQueue(context);//第一步 
    	 
    	StringRequest stringRequest = new StringRequest(Method.GET, "通信的url",  //第二步 
                new Response.Listener<String>() {   
                    @Override   
                    public void onResponse(String response) {   
                        Log.d("TAG", response);   
                    }   
                }, new Response.ErrorListener() {   
                    @Override   
                    public void onErrorResponse(VolleyError error) {   
                        Log.e("TAG", error.getMessage(), error);   
                    }   
                });   
    	 
    	queue.add(stringRequest);//第三步
就是这么简单。 StringRequest中有四个参数,第一个是通信方式,有GET必有POST,第二个是通信的url地址,第三个第四个是通

信的回调,成功了返回值会返回到onResponse中的response参数,失败也如此。

那么Post方式是怎么样的呢?Post你要提交参数给服务器,Post的话StringRequest的创建就要改改

StringRequest stringRequest = new StringRequest(Method.POST, "通信的url",  listener, errorListener) { 
    		 
    	    @Override   
    	    protected Map<String, String> getParams() throws AuthFailureError {   
    	        Map<String, String> map = new HashMap<String, String>();   
    	        map.put("key1", "value1");   
    	        map.put("key2", "value2");   
    	        return map;   
    	    }   
    	     
    	};  

StringRequest中并没有提供设置post参数的方法,但是它的父类Request有,因此我们重写父类的getParams()方法

StringRequest就说完了!


二:JSONRequest的用法---请求一段JSON消息

JSONRequest时抽象类,不能直接实例化,因此从它的子类入手,它的子类有JSONObjectRequest和JSONArrayRequest,两者大

体相同,讲一个就够了,我们发现,JSONObjectRequest,JSONArrayRequest和StringRequest最终都是继承Request的,因此用法

都差不多。

JSONObjectRequest也是三步走

1)创建一个RequestQueue对象(请求队列)

2)创建一个JSONObjectRequest对象

3)把JSONObjectRequest对象添加到RequestQueue(请求队列)中

RequestQueue queue = Volley.newRequestQueue(context);//第一步 
    	 
    	JsonObjectRequest jsonRequest = new JsonObjectRequest(Method.GET, "http://www.tuling123.com/openapi/api",第二步 
        		null, new Response.Listener<JSONObject>() { 
 
					@Override 
					public void onResponse(JSONObject response) { 
						Log.d("TAG", response.toString()); 
						 
					} 
				}, new Response.ErrorListener() { 
 
					@Override 
					public void onErrorResponse(VolleyError error) { 
						Log.d("TAG", error.toString()); 
						 
					} 
				}); 
         
        mQueue.add(jsonRequest);//第三步
Post也是和StringRequest一样,举一反三。


三:ImageRequest的用法---请求一张图片

其实他们最终都是继承Request,因此用法肯定差不多

ImageRequest也是三步走

1)创建一个RequestQueue对象(请求队列)

2)创建一个ImageRequest对象

3)把ImageRequest对象添加到RequestQueue(请求队列)中

RequestQueue queue = Volley.newRequestQueue(context);//第一步 
    	 
    	ImageRequest imageRequest = new ImageRequest("http://inews.gtimg.com/newsapp_ls/0/276901406/0", //第二步 
        		new Response.Listener<Bitmap>() { 
 
					@Override 
					public void onResponse(Bitmap response) { 
						imageView.setImageBitmap(response); 
						 
					} 
				}, 0, 0, Config.RGB_565, new Response.ErrorListener() { 
 
					@Override 
					public void onErrorResponse(VolleyError error) { 
						imageView.setImageResource(R.drawable.ic_launcher); 
						 
					} 
				}); 
         
        mQueue.add(imageRequest);//第三步
这里ImageRequest的参数要说一下,第二个是请求成功的回调,第三第四指定允许图片的宽度高度,如果指定为0,表示不会压

缩,第五个指定图片的颜色属性,第六个是请求失败的回调

总结:总结很简单,记住我这篇文章讲的这三个的用法都是三步走就够了!



下一篇详细讲解加载图片的具体用法Android Volley网络通信框架的使用(二):Volley加载网络图片




发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Android智能机器人详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。