Volley使用与扩展(POST,Cookie)
来源:互联网 发布:hive元数据存储设计 编辑:程序博客网 时间:2024/05/15 03:38
Volley 的简单使用
使用 StringRequest 通过 GET 方式获取数据:
RequestQueue mQueue = Volley.newRequestQueue(context);String Url = "http://www.baidu.com";StringRequest request = new StringRequest(Url, new Response.Listener<String>() { @Override public void onResponse(String s) { Log.e("TAG", s); }}, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.e("TAG", "网络错误"); }});mQueue.add(request);
这很简单,主要分三步:
1.创建 RequestQueue 对象;
2.创建 StringRequest 对象;
3.将 StringRequest 添加到 RequestQueue 中。
Volley 使用 Post 方式交互数据
与GET方式基本相同,只需要设置 Request.Method.POST 即可:
RequestQueue mQueue = Volley.newRequestQueue(context);String Url = "http://www.baidu.com";StringRequest stringRequest = new StringRequest(Request.Method.POST, Url, new Response.Listener<String>() { @Override public void onResponse(String s) { Log.e("TAG", s); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.e("TAG", "网络错误"); }});stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));//配置参数,如重连次数,超时时间...mQueue.add(stringRequest);
Volley使用post方式时设置参数
使用 POST 方式时有时需要提交参数,可以通过重写 getParams 方法来实现。
RequestQueue mQueue = Volley.newRequestQueue(context);String Url = "http://www.baidu.com";StringRequest stringRequest = new StringRequest(Request.Method.POST, Url, new Response.Listener<String>() { @Override public void onResponse(String s) { Log.e("TAG", s); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.e("TAG", "网络错误"); }}){ @Override protected Map<String, String> getParams() throws AuthFailureError { //在这里设置需要post的参数 HashMap<String, String> params = new HashMap<>(); params.put("request", "params");//根据需求自己设置 return params; }};mQueue.add(stringRequest);
Volley中使用Cookie
请求时带上Cookie
Volley默认没有提供使用Cookie的方法,需要我们自己自定义支持Cookie的Request:
package com.zhangke.tool;import java.util.HashMap;import java.util.Map;import com.android.volley.AuthFailureError;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.toolbox.StringRequest;/** * @author 张可 * @version 1.0 * @date 2017.03.10 */public class CookieRequest extends StringRequest { private Map<String, String> mHeaders=new HashMap<String, String>(1); private static String DOMAIN = "www.baidu.com"; public CookieRequest(int method, String url, Listener<String> listener, ErrorListener errorListener) { super(method, url, listener, errorListener); } public CookieRequest(String url, Listener<String> listener, ErrorListener errorListener) { super(url, listener, errorListener); } /** * 这个方法就是用来设置Cookie,在发起HTTP请求之前调用此方法设置Cookie,具体如何设置 * 请按照需求,这里只是一个案例。 */ public void setCookie(String sId){ mHeaders.put("Cookie", "sid=" + sId + "; domain=" + DOMAIN); } /** * Volley会调用此方法获取HTTP的请求头,所以可以再此处设置Cookie. */ @Override public Map<String, String> getHeaders() throws AuthFailureError { return mHeaders; }}
定义CookieRequest的方式很简单,主要在里面添加一个setCookie() 方法,然后重写getHeaders()把设置的Cookie放到HTTP Header里面,之后就可以使用了,使用方式跟StringRequest差不多,如下:
RequestQueue mQueue = Volley.newRequestQueue(context);CookieRequest stringRequest = new CookieRequest(Request.Method.POST, "http://www.baidu.com", new Response.Listener<String>() { @Override public void onResponse(String response) { Log.e("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (error instanceof TimeoutError) { Log.e("TAG", "连接超时"); } else { if (null != error.networkResponse) { Log.e("TAG", "网络错误-code:" + error.networkResponse.statusCode); } else { Log.e("TAG", "网络错误"); } } } }) { @Override protected Map<String, String> getParams() { //在这里设置需要post的参数 HashMap<String, String> params = new HashMap<>(); params.put("key", "value"); return params; }};stringRequest.setCookie("sid");//此处就是需要设置的Cookie中的sidstringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));//设置参数mQueue.add(stringRequest);//方法请求队列中
上面既然使用了Volley发送带有Cookie的HTTP请求,那自然就有使用Volley获取HTTP Cookie的方法。
获取响应Cookie
获取HTTP的Header通过重写 parseNetworkResponse(NetworkResponse response) 方法实现,获取到Header之后取出其中的Cookie并保存起来,下次请求时带上,获取方式如下:
StringRequest request = new StringRequest(Request.Method.POST, Api.LOGIN_LOGIN, new Response.Listener<String>() { @Override public void onResponse(String s) { Log.e("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { callback.onError(Column.INTERNET_ERROR); } }) { @Override protected Response<String> parseNetworkResponse( NetworkResponse response) { try { Map<String, String> responseHeaders = response.headers; String cookie = responseHeaders.get("Set-Cookie");//此处获取到Cookie,可以保存到缓存中下次使用 //todo save cookie String dataString = new String(response.data, "UTF-8"); return Response.success(dataString, HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } } @Override protected Map<String, String> getParams() throws AuthFailureError { return params; }};request.setRetryPolicy(new DefaultRetryPolicy(timeOut, connectCount, 1.0f));mQueue.add(request);
通过重写上面的 parseNetworkResponse(NetworkResponse response) 方法就可以获取到HTTP的header,按需求取出Cookie并保存起来。
另外,HTTP中,服务端响应的HTTP数据中的 Cookie 保存在 Header 的 Set-Cookie 字段中,客户端请求的 Cookie 保存在 Header 的 Cookie 中,其中内容可以自己定义,一般至少需要设置,格式如上面的 CookieRequest 中的 setCookie() .
- Volley使用与扩展(POST,Cookie)
- 使用Volley请求,获取POST请求cookie值
- Volley的使用(一):get+post
- volley使用 POST请求
- Volley框架之使用GET或POST将cookie传给服务器
- Volley框架之使用GET或POST将cookie传给服务器
- Volley与WebView共享Cookie
- 使用volley进行post操作
- Android 使用OkHttp扩展Volley
- Android 使用OkHttp扩展Volley
- volley框架cookie的获取与设置
- 使用Volley获取多个cookie
- Volley框架之使用GET取得Cookie
- Volley的使用(三):Volley与Activity的联动 + Volley的二次封装
- Volley(二),扩展 && 原理
- 使用Volley提交Json数据post
- Volley使用JsonObjectRequest发送Post请求失败
- Volley的使用(二) post请求
- 常用正则表达式(转)
- jsp页面提示“Multiple annotations found at this line:
- 数组题
- wpf 中文输入法回车事件和控件的回车事件冲突问题
- Python3大文件切割
- Volley使用与扩展(POST,Cookie)
- Linux音频设备驱动_OSS驱动框架(四)————OSS 用户空间编程
- Robot Framework自动化测试-切换浏览器
- 在VS2008环境下的C++异常处理
- 数学问题:2 2 2 = 6……
- android怎样调用@hide和internal API
- 容器启动方法幂等性事故
- FTP上传中文设置
- MATLAB学习笔记之-----数组、矩阵、向量索引和逻辑索引