最近项目需要将网页的一些信息展示到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. 关于Windows系统防火墙

    步入win7时代,一般用户,真的没必要再去找墙了,系统墙已经足够(如果你是外网用户,毫无疑问已经足够!如果你是局域网用户,加个ARP防火墙,足矣) 有人说,系统墙防外不错,防内就不行了,其实是误解.只 ...

  2. Codeforces 627 A. XOR Equation (数学)

    题目链接:http://codeforces.com/problemset/problem/627/A 题意: 告诉你s 和 x,a + b = s    a xor b = x   a, b > ...

  3. php连接mysql配置

    php连接mysql测试代码: <?php $link=mysql_connect('localhost','root','123456'); if(!$link) echo "失败! ...

  4. Computational Geometry Template_Polygon

    #include <stdlib.h> #include <math.h> #include <iostream> #define MAXN 1000 #defin ...

  5. 前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite

    一.服务 AngularJS功能最基本的组件之一是服务(Service).服务为你的应用提供基于任务的功能.服务可以被视为重复使用的执行一个或多个相关任务的代码块. AngularJS服务是单例对象, ...

  6. php中curl不支持https的解决办法

    在php程序中使用curl去访问https站点时,报错:Protocol https not supported or disabled in libcurl 该错误信息表示php当时编译时使用的cu ...

  7. PostgreSQL中使用枚举类型

    https://wiki.postgresql.org/wiki/Enum 建立enum: pgsql=# CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy' ...

  8. MySQL 错误代码和消息

    本章列出了当你用任何主机语言调用MySQL时可能出现的错误.首先列出了服务器错误消息.其次列出了客户端程序消息. B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: ·         错 ...

  9. 课本[Teb]软件设计

    中文名:课本 英文名:Textbook 简称:Teb 一个专注于分享校内课件的软件. 一个课件的整合平台. 发布平台:web>android>ios; 主要功能:预览课件(暂定),搜索课件 ...

  10. (转)用AGG实现高质量图形输出(二)

    本文上接<用AGG实现高质量图形输出(一)>,分别介绍了AGG显示流程中的各个环节. 上次讲了AGG的显示原理并举了一个简单的例子,这一篇文章开始讲AGG工作流程里的每个环节.为了方便对照 ...