Volley学习(适合新手)


2015-12-17 更新日志

距离这篇文章已经过去这么旧了。我也用了这么久的Volley,也总结了一些它的方法,制作了个工具类,链接:

https://github.com/mBigFlower/volley-utils


-----------------------------------------------------------------------------

最近打算用Volley作为某个项目的网络请求框架。

废话先不多说,转载别人的:http://www.kwstu.com/ArticleView/kwstu_20144118313429

jar包的话他的文章里也有提到,感觉还是挺新的包吧,我重新上传到CSDN里了,方便下载:Volley.jar下载

具体的用法链接里很清楚了,我这里只是做一个小结,因为自己也是个小白,有不对的还希望大家批评指出:

有一点我很喜欢,在回调里可以直接更新UI。想当初自己写请求的时候,每次回调里都要加一个Handler。

请求方法有四种:Get, Post, Put, Delete

网络请求分三步:

1 初始化  

RequestQueue mQueue = Volley.newRequestQueue(context);


值得注意的一点 RequestQueue记得用单例,如果每次请求都新建一个

RequestQueue mQueue = Volley.newRequestQueue(context);

会造成内存泄漏哈,我用DDMS测试的,应该是有风险的


2  赋值,回调(我这里只是举例子,具体其他的看他的文章哈,毕竟小结)

StringRequest stringRequest = new StringRequest("http://www.baidu.com",  
                        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);  
                            }  
                        });  

3  开始请求(把请求加入了一个队列?),add了就开始请求了

mQueue.add(stringRequest);


上面是网络请求的一种方法,有正确和错误两种回调,回调结果为String ; 另一种方式回调结果可以是Json

步骤还是那三步,不过第二步变成了这样:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", 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.e("TAG", error.getMessage(), error);  
            }  
        });  

具体使用哪种方法看个人喜好了。


其实Volley的功能远不止如此,我这里只是个入门级的。


有些情况我们跟服务器交互的时候需要在Header里面添加something,方法出自: http://blog.csdn.net/tcpipstack/article/details/39084245

只需要在第二步的后面加点东西:

StringRequest stringRequest = new StringRequest ("http://120.25.147.61/basic/system/time", 
                new Response.Listener<String>() {  
                    @Override  
                    public void onResponse(String response) {  
                        Util.d("TAG", response); 
                        Glide();
                        initPhoto();
                    }  
                }, new Response.ErrorListener() {  
                    @Override  
                    public void onErrorResponse(VolleyError error) {  
                        Util.e("TAG", error.getMessage());  
                    }  
                }){

				@Override
				public Map<String, String> getHeaders()
						throws AuthFailureError {
					SharedPreferences mSp = getSharedPreferences("USER", Context.MODE_PRIVATE);
					HashMap<String, String> headers = new HashMap<String, String>();  
		            headers.put("Cookie", "**************************");  
		            headers.put("content-type", "application/x-www-form-urlencoded"); 
					return headers;
				}
			
		};  

重点是这句话:
@Override
				public Map<String, String> getHeaders()
						throws AuthFailureError {
					SharedPreferences mSp = getSharedPreferences("USER", Context.MODE_PRIVATE);
					HashMap<String, String> headers = new HashMap<String, String>();  
		            headers.put("Cookie", "**************************");  
		            headers.put("content-type", "application/x-www-form-urlencoded"); 
					return headers;
				}


值得注意的一点 RequestQueue记得用单例,如果每次请求都新建一个

RequestQueue mQueue = Volley.newRequestQueue(context);

那么很可能OOM哈,谁试谁知道



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值