Android开发——webview获取H5的Cookie并保存在本地
来源:互联网 发布:php base64_encoder 编辑:程序博客网 时间:2024/06/10 08:58
最近项目遇到一个新需求,H5的登录态跟APP的登录态分开,所以需要记住H5的登录状态,但是我的webview app已退出再次打开,cookie就被清空(这个找了很久也没会找到原因)。我的解决方法是:获取H5的cookie,保存在本地数据库,·再次进入webview判断是否有Cookie,如果没有,从本地数据库取出Cookie并设置给webview。
webview管理cookie的机制:将域名和cookie存在数据库中,当webview访问该域下面的网页时就会将该域名相关的cookie带上。所以我们的本地数据库应该将域名和cookie的key做为主键,从H5获取Cookie并解析出键值对存到本地数据库,重新打开webview时如果没有cookie,从本地数据库中取出相应域名的cookie设置给webview。
获取H5cookie并保存的代码如下:
@Override public void onPageFinished(WebView view, String url) { LogUtil.i(TAG, "onPageFinished:" + url); CookieSyncManager.createInstance(mActivity); CookieManager cookieManager = CookieManager.getInstance(); String cookie = cookieManager.getCookie(url);//从H5获取cookie LogUtil.i(TAG, "onPageFinished cookie :" + cookie); CookieSyncManager.getInstance().sync(); //将cookie存到数据库 if(!TextUtils.isEmpty(cookie)){ String[] cookies = cookie.split(";"); for(int i=0;i<cookies.length;i++){ String item = cookies[i]; int index = item.indexOf("="); WebViewBean bean = new WebViewBean(); bean.hostStr = mHost; bean.cookieName = item.substring(0, index); bean.cookieValue = item.substring(index+1); DBHelper.getDatabaseDAO().insert(bean, WebViewBean.class); } } super.onPageFinished(view, url); }
以上的代码是从H5获取cookie并存储到本地数据库。hostStr 和cookieName 这两个是主键。
再次打开webview对cookie进行初始化代码:
/** * 初始化cookie信息 */ private void initCookie() { //获取网页的域名 try { URL u = new URL(url); mHost = u.getHost(); } catch (MalformedURLException e) { e.printStackTrace(); } //获取页面的cookie CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); String oldCookie = cookieManager.getCookie(url); LogUtil.i(TAG, "onPageFinished old cookie :" + oldCookie); //如果没有cookie从本地数据库中取出 if(TextUtils.isEmpty(oldCookie)) { ArrayList<WebViewBean> query = DBHelper.getDatabaseDAO().query("hostStr='" + mHost + "'", WebViewBean.class); //设置给webview if(null != query && query.size() > 0){ for (int i=0;i<query.size();i++){ WebViewBean bean = query.get(i); String key = bean.cookieName; String value = bean.cookieValue; String coo = key + "=" + value; cookieManager.setCookie(mHost, coo); } CookieSyncManager.getInstance().sync(); } String addedCookie = cookieManager.getCookie(url); LogUtil.i(TAG, "onPageFinished added cookie :" + addedCookie); } }
我的数据库:
@Table(name="tb_WebViewBean")public class WebViewBean { @PK @Column(name="hostStr") public String hostStr;//cookie @PK @Column(name="cookieName") public String cookieName;//cookieName @Column(name="cookieValue") public String cookieValue;//cookieValue}
用的数据库框架:lib_anotation
参考博客:http://zlping.iteye.com/blog/1633213
0 0
- Android开发——webview获取H5的Cookie并保存在本地
- Android用webView加载h5的页面,h5获取本地的图库中的图片
- android开发中webview保存cookie问题的解决
- android开发中webview保存cookie问题的解决
- android开发中webview保存cookie问题的解决
- android开发中webview保存cookie问题的解决
- android webview 保存cookie
- android webview 保存cookie
- android webview cookie保存
- android webview H5开发若干问题之问题二:cookie问题
- Android中OKHttp保存Cookie并传入WebView
- Android实现对Dialog的截图并保存在本地
- android webview加载H5页面丢失cookie信息的解决办法
- Android WebView获取cookie
- Android拍照并保存在本地
- Android WebView保存登陆cookie
- Android WebView保存Cookie登录
- Android WebView保存Cookie登录
- redis集群配置笔记
- String类中的intern
- GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
- WINAPI宏
- 最长上升子序列(nlogn)
- Android开发——webview获取H5的Cookie并保存在本地
- [bigdata-011]用docker创建mysql容器+ mysql workbench gui tools
- PHP配置、扩展模块安装
- 【Doug Lea系列】Java并发结构
- linux 配置memcached以及php的memcache扩展
- [bigdata-012]部署CDH5 Hadoop 的伪分布式容器
- github管理神器SourceTree
- Android招行一网通对接
- oracle xmltype字段类型内容读取