Android开发中怎样使用cookieManager来管理

在项目开发中遇到一个问题,就是在登录界面向服务器发送登录请求后,然后就跳到一个与用户订阅有关的界面,然后,我想服务器发送的是正确的Url,用Log打印出返回结果,但是只有一个html的元素信息。通过对这个html的元素信息发的分析,与后台同事分析发现,我的url没有cookie 信息。在登录界面向服务器发送的登录验证信息,但是服务器没有存储相应的用户信息,就导致我登录进去后向服务器索要用户相关信息时,服务器判断是一个新用户,就返回了一个登录界面hxml给我。所以就出现了开头那个问题,那么怎样才能解决这个问题呢,在网上查了很多资料,本人发现了一个简单易用的方法,那就是用cookieManager来管理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:#2b2b2b;color:#a9b7c6;font-family:"宋体";font-size:12.0pt;"><span style="background-color:#344134;">setCookies</span>(uc.getHeaderFields())<span style="color:#cc7832;">;</span>

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

  1. 过期按需处理一下

附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);
	}
}
文章导航