您的位置:首页 > 移动开发

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

2017-04-26 09:55 375 查看
一..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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: