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

来源:互联网 发布:网页淘宝自动跳转app 编辑:程序博客网 时间:2024/05/22 12:59

一..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>() {@Overridepublic void onResponse(String str) {//你的其他业务逻辑}, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {Toast.makeText(LoginActivity.this, "服务器连接失败", Toast.LENGTH_SHORT).show();}}) {@Overrideprotected Response<String> parseNetworkResponse(NetworkResponse response) {try {// 从服务器取cookieMap<String, String> responseHeaders = response.headers;//这里就是cookie,里面的SessionID不为空就说明取到了String rawCookies = responseHeaders.get("Set-Cookie");// 保存Cookieif (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
原创粉丝点击