android 6.0版本下WebView如何设置cookie?

android 6.0版本下WebView如何设置cookie?,第1张

我们在android中访问网络经常会用到Apache的HttpClient,用此类去访问网络获取数据,

但是在写android界面的时候又时不时的会用到一些WebView组件,这时候访问一个以经登录的页面的时候cookie设置就有个问题

在HttpClient中保存下来的Cookie怎么设置到WebView组件里,让WebView也保持住Cookie状态,也就是登录状态呢?

CookieSyncManager和CookieManager就是做这种事的,下面来看代码里怎么设置Cookie让WebView也保持登录状态:

Java代码

/**

* 同步一下cookie

*/

public static void synCookies(Context context, String url) {

CookieSyncManager.createInstance(context)

CookieManager cookieManager = CookieManager.getInstance()

cookieManager.setAcceptCookie(true)

cookieManager.removeSessionCookie()//移除

cookieManager.setCookie(url, cookies)//cookies是在HttpClient中获得的cookie

CookieSyncManager.getInstance().sync()

}

在android里面在调用webView.loadUrl(url)之前一句调用此方法就可以给WebView设置Cookie

注:这里一定要注意一点,在调用设置Cookie之后不能再设置

Java代码

webView.getSettings().setBuiltInZoomControls(true)

webView.getSettings().setJavaScriptEnabled(true)

这类属性,否则设置Cookie无效。

1、首先 在android应用程序开始的activity中的oncreaty()方法中注册cookiemanager。如下:

<span style="font-size:18px">//设置网络请求cookie

CookieSyncManager.createInstance(this)</span>

2、然后在到网络请求的那个类中设置如下 设置和获取cookie的方法

<span style="font-size:18px"> protected String getCookie() {

CookieManager cookieManager = CookieManager.getInstance()

String cookie = cookieManager.getCookie("cookie")

if (cookie != null) {

return cookie

} else {

return ""

}

}

protected void setCookie(String cookie) {

CookieManager cookieManager = CookieManager.getInstance()

cookieManager.setCookie("cookie", cookie)

}</span>

3、最后一步就在urlConnection.openConnectin()的后面设置如下方法:

uc = (HttpURLConnection) new URL(url + "?" + paramsStr.toString()).openConnection()

uc.setRequestProperty("Cookie", getCookie())

<pre style="background-color:#2b2b2bcolor:#a9b7c6font-family:'宋体'font-size:12.0pt"><span style="background-color:#344134">setCookies</span>(uc.getHeaderFields())<span style="color:#cc7832"></span>

好了到这里就完成了cookie的设置

3. 过期按需处理一下

附1:cookie的获取

response.headerFields = conn.getHeaderFields()

setCookies(response.headerFields)

/**

* 存储cookie

* @param headerFields

*/

protected void setCookies(Map<String, List<String>>headerFields) {

if (null == headerFields) {

return

}

List<String>cookies = headerFields.get(COOKIES_KEY)

if (null == cookies) {

return

}

for (String cookie : cookies) {

setCookie(cookie)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11416184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存