在项目开发中用webview加载html,用户在html里登录,需求是当用户杀掉进程重新进入App的时候要保持用户的登录状态,Android 原生的webview是不记录登录状态的,这时候需要我们进入页面的时候取出cookie,退出的时候在生命周期里存储cookie,网上找了很多资料才解决问题,特此记录一下,具体操作代码如下:

//获取cookie 在刚进入页面的时候,获取到cookie后通过cookieManager的setCookie设置给webview
 

public void setCookies(String cookiesPath) {    Map cookieMap = new HashMap<>();    String cookie = getSharedPreferences("cookie", Context.MODE_PRIVATE).getString("cookies", "");// 从SharedPreferences中获取整个Cookie串    if (!TextUtils.isEmpty(cookie)) {        String[] cookieArray = cookie.split(";");// 多个Cookie是使用分号分隔的        for (int i = 0; i < cookieArray.length; i++) {            int position = cookieArray[i].indexOf("=");// 在Cookie中键值使用等号分隔            String cookieName = cookieArray[i].substring(0, position);// 获取键            String cookieValue = cookieArray[i].substring(position + 1);// 获取值            String value = cookieName + "=" + cookieValue;// 键值对拼接成 value            Log.i("cookie", value);            CookieManager.getInstance().setCookie(getDomain(cookiesPath), value);// 设置 Cookie        }    }}
//退出页面的时候保存cookie,不仅要在onDestory中写还要写再onPause中,点击home键的时候会走onPause的生命周期
@Overrideprotected void onDestroy() {    super.onDestroy();        CookieManager cookieManager = CookieManager.getInstance();        String cookieStr = cookieManager.getCookie(getDomain(“需要记录登录的url”));        SharedPreferences preferences = getSharedPreferences("cookie", Context.MODE_PRIVATE);        SharedPreferences.Editor editor = preferences.edit();        editor.putString("cookies", cookieStr);        editor.commit();}
//退出的时候用到的getDomain获取域名的方法
/** * 获取URL的域名 */private String getDomain(String url) {    url = url.replace("http://", "").replace("https://", "");    if (url.contains("/")) {        url = url.substring(0, url.indexOf('/'));    }    return url;}

//清除cookie

public void clearWebViewCache() {// 清除cookie即可彻底清除缓存CookieSyncManager.createInstance(self);CookieManager.getInstance().removeAllCookie();// 清除cookiePersistentCookieStore  myCookieStore = new PersistentCookieStore(context);myCookieStore.clear();}

//获取webview中的cookie

public static Map getWebViewCookie()    {        Map map = new HashMap<>();        CookieManager cookieManager = CookieManager.getInstance();        String CookieStr = cookieManager.getCookie(commMacro.DOMIN);        String[] cooLs = CookieStr.split(";");        for (String coo:cooLs) {            String[] ls = coo.split("=");            if(ls.length==2)            {                              map.put(ls[0],ls[1]);            }        }        return map;    }

 

更多相关文章

  1. repo详解与如何更改manifest快速获取和复用AOSP代码
  2. Android(安卓)Rom分区 与 SD卡读写
  3. 菜鸟的安卓实习之路----关于EditText的最大长度maxLength和密码
  4. Android(安卓)Studio获取SHA1和MD5值---》图文直播
  5. Android通过原生APi获取所在位置的经纬度
  6. Android实现登录功能,Android与服务器数据交互,使用tomcat、mysql
  7. Android系统的Root权限获取与检测
  8. Android---网络交互之登录嘀咕网
  9. android 下使用GPS 无法获取经纬度的解决方法

随机推荐

  1. Java EE 6 SDK+Eclipse JEE+Android(安卓
  2. Android Choreographer 源码笔记
  3. 调用系统计算器 android(适用于不同品牌)
  4. Google官方确认Android 冰激凌三明治即将
  5. Android中的手势
  6. android OnPageChangeListener
  7. android in linux 笔记
  8. Android短视频开发
  9. Android禁止横屏和竖屏切换
  10. Android RadioButton背景图片和文字的相