Android的Volley框架实现获取cookie并同步到Webview的实现

一..Session的获取:

使用说明:通过Volley可以获取到请求的SessionID,你可以用这个SessionID访问Webview中的网页,不必再次重复登陆。

1.重写Volley的parseNetworkResponse方法。

2.用到的保存session方法CommonUtil.saveSettingNote()源码地址:将Session保存在本地的小方法

3.实现关键源码:

private boolean sendRequestByVolleyPost(final String url, final Map<String, String> params) {
		StringRequest stringRequest = new StringRequest(Method.POST, url, new Listener<String>() {
			@Override
			public void onResponse(String str) {
			//你的其他业务逻辑

		}, new ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				Toast.makeText(LoginActivity.this, "服务器连接失败", Toast.LENGTH_SHORT).show();
			}
		}) {
			@Override
			protected Response<String> parseNetworkResponse(NetworkResponse response) {
				try {
					// 从服务器取cookie
					Map<String, String> responseHeaders = response.headers;
					//这里就是cookie,里面的SessionID不为空就说明取到了
					String rawCookies = responseHeaders.get("Set-Cookie");
					// 保存Cookie
					if (rawCookies != null) {
						cookieMap.put("cookies", rawCookies);
						//不懂sharePreference保存的,可看下我的博客里文章《Android本地存储数据方法》
						CommonUtil.saveSettingNote(LoginActivity.this, "CookieSetting", cookieMap);
					}
				
					String dataString = new String(response.data, "UTF-8");
					Log.i("cookie", "response.data数据:" + dataString);
					return Response.success(dataString, HttpHeaderParser.parseCacheHeaders(response));
				} catch (UnsupportedEncodingException e) {
					return Response.error(new ParseError(e));
				}
			}

		};

		// 设置请求的Tag标签,可以在全局请求队列中通过Tag标签进行请求的查找
		stringRequest.setTag("Login");
		// 将请求加入全局队列中
		VolleyApplication.getHttpQueues().add(stringRequest);
		return true;
	}

二、上面求实现了获取SessionID和保存。接下来写个应用场景,在Webview中同步我们的Session,实现免重复登陆,访问同一个项目中的网页。也可以实现在Native安卓登录界面,发起登陆请求,成功登陆后,可直接访问Webview中的网页,因为有Session的同步,所有不会被拦截而重复登陆。

1.同步cookie方法:

	/**
	 * 将cookie同步到WebView
	 * 
	 * @param url
	 *            WebView要加载的url
	 * @param cookie
	 *            要同步的cookie
	 * @return true 同步cookie成功,false同步cookie失败
	 */
	public void synCookies(String url,String cookiestr) {
	    CookieSyncManager.createInstance(this);
	    cookieManager = CookieManager.getInstance();
	    cookieManager.setAcceptCookie(true);
	    // 每次移除会有Cookie不一致问题,注释该地方
//	    cookieManager.removeSessionCookie();// 移除
	    cookieManager.setCookie(url,cookiestr);
	    CookieSyncManager.getInstance().sync();
	}
2.在Webview的loadUrl()方法执行之前同步Cookie(必须):

取到本地存储Session小方法CommonUtil.getSettingNote()源码地址:取出方法,点击进入

synCookies(url,CommonUtil.getSettingNote(WebViewActivity.this, "CookieSetting", "cookies"));
webView.loadUrl(url);






  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值