最近项目需要将网页的一些信息展示到app当中,由于采用的是okhttp进行网络的访问,并采用了cookie对于每次的访问请求都做了验证,所以在加入webview显示网页的时候会需要进行一下验证,为了跳过这一验证,直接进入到我们需要的页面,所以就需要我们在获取到cookie后,将cookie传入到webview当中,从而使得页面不需要再次的验证。

获取cookie的方式有很多,对于这一块的问题并不是很大,由于我们的项目需求时间较为紧迫,我在构建项目的时候采用的是已经被封装好的okhttputil来作为网络的框架实现服务器的交互,在这个框架中,已经为我们实现了cookie的每次请求的加入,所以并不需要自己花费时间去实现,其配置cookie的方式如下:

             CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cookieJar(cookieJar)
//其他配置
.build();
OkHttpUtils.initClient(okHttpClient);
在定义的application当中,加入以上的配置就可以了。
所以从这里的cookieJar当中我们自然也能获取到相应的cookie,
           CookieJarImpl cookieJar1 = new CookieJarImpl(new PersistentCookieStore(getActivity().getApplicationContext()));
CookieStore cookieStore1= cookieJar1.getCookieStore();
List<Cookie> cookies1=cookieStore1.getCookies();
Cookie cookie1=cookies1.get(0); 上面的代码在进行网络请求后可以让我们获取到cookie,通过获取到的cookie,我们就能将其加入到webview当中,从而避免webview的重复登陆。 我们在webview当中实现
         CookieSyncManager.getInstance();
CookieSyncManager.createInstance(this);//创建一个cookie管理器
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();// 移除以前的cookie
cookieManager.removeAllCookie();
cookieManager.setCookie("your url",cookie);//为url设置cookie
CookieSyncManager.getInstance().sync();//同步cookie
在我们load()之前,我们需要调用上面的方法,将我们获取到的cookie添加到需要访问的url当中,随后就可以进行访问了。

不过在实现当中我还是遇到了问题,可以很明确的发现获取的cookie并不对,这个时候我开始怀疑自己获取的cookie方法是否有问题,于是我点开了其实现cookie加入的源码当中,
在其实现获取cookie的方法当中,我发现了这样的一个问题,
                 cookiePrefs = context.getSharedPreferences(COOKIE_PREFS, 0);
cookies = new HashMap<String, ConcurrentHashMap<String, Cookie>>(); // Load any previously stored cookies into the store
Map<String, ?> prefsMap = cookiePrefs.getAll();
我发现其对于cookie是放在sharedpreferences当中来实现的,于是我对于获取的cookieJar进行了遍历,发现竟然有三个cookie,这个时候我才明白,
之前因为调试的时候换了三个不同ip的服务器,所以导致app缓存了三个cookie,只是我不明白为什么在我shutdown的时候这些cookie没有被清除呢?
所以我清除了app的缓存,最后再次获取并放入webview之后,功能就能正常的运行和实现了。

android 中对于采用okhttp时获取cookie并放入webview实现跳过登陆显示页面的功能的更多相关文章

  1. Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程

    最近在面试Android,今天出了一个这样的题目,即如题: 我当时以为生命周期是这样的: onCreate --> onStart -- ---> onResume ---> onP ...

  2. 在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可

    在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可

  3. 【转】【Android测试技巧】01. root后adb shell默认不是root用户时,如何将文件放入手机系统中

    http://blog.csdn.net/wirelessqa/article/details/8624208 有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切 ...

  4. [原创]Android中LocationManager的简单使用,获取当前位置

    Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置:注册/注销来自某个 LocationProvider的周期性的位置更新:以及注册/注销接近 ...

  5. Android中 Bitmap Drawable Paint的获取、转换以及使用

    比如Drawable中有一系列连续的图片,img_0.png, img_1.png, img_2.png ... 如果要动态获取这些图片,通过"R.drawable.img_x"的 ...

  6. Android中实现照片滑动时左右进出的动画的xml代码

    场景 Android中通过ImageSwitcher实现相册滑动查看照片功能(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  7. Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie

    最近做项目在手机端登录Http请求和 WebView 记载登录获取Cookie信息,可查看Cookie信息. 如图: Http请求获取Cookie信息: public static String re ...

  8. Android中通过GPS或NetWork获取当前位置的经纬度

    今天在Android项目中要实现一个通过GPS或NetWork来获取当前移动终端设备的经纬度功能.要实现该功能要用到Android Framework 中的 LocationManager 类.下面我 ...

  9. android中加载的html获取的宽高不正确

    wap页面使用 js库是zepto,按照惯例在$(function(){})中,来获取当前可视区的宽高,但得到的宽高却与预想的相差十万八千里. 原本android手机的浏览器设定的宽高基本是360*6 ...

随机推荐

  1. Codeforces 707 E. Garlands (二维树状数组)

    题目链接:http://codeforces.com/problemset/problem/707/E 给你nxm的网格,有k条链,每条链上有len个节点,每个节点有一个值. 有q个操作,操作ask问 ...

  2. Codeforces Round #292 (Div. 1) B. Drazil and Tiles (类似拓扑)

    题目链接:http://codeforces.com/problemset/problem/516/B 一个n*m的方格,'*'不能填.给你很多个1*2的尖括号,问你是否能用唯一填法填满方格. 类似t ...

  3. POJ 2886Who Gets the Most Candies?(线段树)

    POJ 2886 题目大意是说有n个人围成一圈,游戏的起点是k,每个人持有一个数字(非编号)num,每次当前的人退出圈,下一个人是他左边的第num个(也就是说下一个退出的是k+num, k可以为负数, ...

  4. How Tomcat Works(十三)

    本文分析tomcat容器的安全管理,servlet技术支持通过配置部署描述器(web.xml文件)来对受限内容进行访问控制:servlet容器是通过一个名为验证器的阀来支持安全限制的,当servlet ...

  5. webbench压力测试

    webbench最多可以模拟3w多个并发请求去测试网站负载能力. 一:获取webbench工具,安装编译: wget http://blog.zyan.cc/soft/linux/webbench/w ...

  6. C#和JavaScript的区别

    Strong and Loose Typing: 强弱比较 // C# var customer = new Customer(); //var is compiler inferred //Java ...

  7. DevExpress控件使用经验总结

    转自:http://www.cnblogs.com/wuhuacong/archive/2011/08/31/2161002.html

  8. CloudStack 4.2 与CloudStack 4.1二级存储API发生变化

    CloudStack 4.1查看二级存储 http://192.168.150.16:8080/client/api?command=listHosts&response=json&s ...

  9. iOS开发-基本的网络知识

    一.HTTP协议的主要特点:(摘自 仰望星空 的博客)重点内容 1. CS模式 2. 简单快速:只需要传送请求方法和路径.(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由C ...

  10. wpf随笔

    因项目需要查找wpf.DataGrid的Binding方法, 由于其属于Dev框架体系内,偏向于winform并无Binding 1.且线程外更改UI控件还需要委托或者action,而Wpf控件仅需要 ...