Android开发中怎样使用cookieManager来管理cookie
最后更新于:2022-04-01 11:26:13
在项目开发中遇到一个问题,就是在登录界面向服务器发送登录请求后,然后就跳到一个与用户订阅有关的界面,然后,我想服务器发送的是正确的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的设置
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);
}
}
~~~