Android-HttpURLConnection自己主动管理cookie
Volley那么好用的框架居然没有内置对cookie的处理,自己搞一个!
public class MobCookieManager {//转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/46890245 private MobCookieManager(){} /**
* 应用启动的时候调用,參考:{@link CookieManager#getInstance CookieManager.getInstance()}
* */
public static void init(Context context){
CookieSyncManager.createInstance(context);
} public static String getCookie(String url){
CookieManager cookieManager = CookieManager.getInstance();
return cookieManager.getCookie(url);
} /**
* http://stackoverflow.com/questions/16007084/does-android-webkit-cookiemanager-works-on-android-2-3-6
* */
public static void setCookies(String url, Map<String, List<String>> headerFields) {
if (null == headerFields) {
return;
}
List<String> cookies = headerFields.get("Set-Cookie");
if (null == cookies) {
return;
}
CookieSyncManager.getInstance().startSync();
for (String cookie : cookies) {
setCookie(url, cookie);
}
CookieSyncManager.getInstance().sync();
} private static void setCookie(String url, String cookie) {
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true); if(cookie.indexOf("Expires") < 0){
cookie = addExpireToCookie(cookie);
}
cookieManager.setCookie(url, cookie);
} /**
* http://stackoverflow.com/questions/8547620/what-is-a-session-cookie
* */
private static String addExpireToCookie(String cookie) {
Date expireDate = new Date(new Date().getTime() + 24L*60*60*1000);
String datestr =DateUtil.format(DateUtil.east8ToGmt(expireDate), DateUtil.FORMAT_GMT);
String arr[] = cookie.split(";");
StringBuilder sb = new StringBuilder();
sb.append(arr[0]);
sb.append("; ").append("Expires=").append(datestr);
if(arr.length > 1){
for(int i=1; i<arr.length; i++){
sb.append(";").append(arr[i]);
}
}
return sb.toString();
} }
</pre><pre name="code" class="java"><pre name="code" class="java">public class DateUtil { public static final String FORMAT_MDHM = "MM-dd HH:mm";
public static final String FORMAT_YMD = "yyyy-MM-dd";
public static final String FORMAT_YMDHM = "yyyy-MM-dd HH:mm";
public static final String FORMAT_YMDHMS = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_GMT = "EEE, dd-MMM-yyyy HH:mm:ss 'GMT'"; private static final String TAG = DateUtil.class.getSimpleName();
private static final Locale DEFAULT_LOCALE = Locale.CHINA; private static ThreadLocal<Map<String, SimpleDateFormat>> threadLocal = new ThreadLocal<Map<String, SimpleDateFormat>>() {
protected synchronized Map<String, SimpleDateFormat> initialValue() {
Map<String, SimpleDateFormat> map = new HashMap<String, SimpleDateFormat>();
map.put(FORMAT_MDHM, new SimpleDateFormat(FORMAT_MDHM, DEFAULT_LOCALE));
map.put(FORMAT_YMD, new SimpleDateFormat(FORMAT_YMD, DEFAULT_LOCALE));
map.put(FORMAT_YMDHM, new SimpleDateFormat(FORMAT_YMDHM, DEFAULT_LOCALE));
map.put(FORMAT_YMDHMS, new SimpleDateFormat(FORMAT_YMDHMS, DEFAULT_LOCALE));
map.put(FORMAT_GMT, new SimpleDateFormat(FORMAT_GMT, DEFAULT_LOCALE));
return map;
}
}; private DateUtil(){} public static SimpleDateFormat getDateFormat(String format) {
Map<String, SimpleDateFormat> map = (Map<String, SimpleDateFormat>) threadLocal.get();
SimpleDateFormat sdf = map.get(format);
if(sdf != null){
return sdf;
}
try{
sdf = new SimpleDateFormat(format, DEFAULT_LOCALE);
map.put(format, sdf);
}catch(Exception e){
MyLog.e(TAG, e);
}
return sdf;
} public static Date parse(String textDate, String format) {
if(textDate == null || textDate.length() <= 0){
return null;
}
try{
SimpleDateFormat sdf = getDateFormat(format);
if(sdf == null){
return null;
}
return sdf.parse(textDate);
}catch(Exception e){
MyLog.e(TAG, e);
return null;
} } public static String format(Date date, String format){
if(date == null){
return null;
}
SimpleDateFormat sdf = getDateFormat(format);
if(sdf == null){
return null;
}
return sdf.format(date);
} public static Date east8ToGmt(Date src){
if(src == null){
return null;
}
TimeZone srcTimeZone = TimeZone.getTimeZone("GMT+8");
TimeZone destTimeZone = TimeZone.getTimeZone("GMT");
long targetTime = src.getTime() - srcTimeZone.getRawOffset() + destTimeZone.getRawOffset();
return new Date(targetTime);
} }
注意:我们这里使用的android.webkit.CookieManager。
Android-HttpURLConnection自己主动管理cookie的更多相关文章
- Android HttpURLConnection源代码分析
Android HttpURLConnection源代码分析 之前写过HttpURLConnection与HttpClient的差别及选择.后来又分析了Volley的源代码. 近期又遇到了问题,想在V ...
- Android HttpURLConnection.connect找不到源 HttpURLConnection连接失败 HttpURLConnection.connect IO异常 解决办法
Android HttpURLConnection.connect找不到源 HttpURLConnection连接失败 HttpURLConnection.connect IO异常 解决办法 以下代 ...
- android 给url添加cookie
前些天因为项目需要写了一个通过网络连接去服务端拿数据的方法,但是需要让程序添加上cookie,因为之前对cookie 没有怎么研究过(包括做web 那会也没有用过或者说很少用),所以 一时用起来不太会 ...
- android——HttpUrlConnection
前面了解了下服务端和客户端的相关知识 ,那么他们是通过什么来进行进行连接的呢? Android可以用HttpURLConnection或HttpClient接口来开发http程序.在Android 上 ...
- [Android] HttpURLConnection & HttpClient & Socket
Android的三种网络联接方式 1.标准Java接口:java.net.*提供相关的类//定义地址URL url = new URL("http://www.google.com" ...
- Android HttpURLConnection Post 参数 (https)
声明utf-8: public static String CHARSET_UTF8 = HTTP.UTF_8; eg:登陆请求方法,通过接口返回结果: public static void logi ...
- Android HttpURLConnection And HttpClient
Google的工程师的一个博客写到: HttpURLConnection和HttpClient Volley HTTP请求时:在Android 2.3及以上版本,使用的是HttpURLConnecti ...
- android webview setcookie 设置cookie
CookieSyncManager.createInstance(mWebView.getContext()); CookieManager cookieManager = CookieManager ...
- Android HttpURLConnection的使用+Handler的原理及典型应用
1.介绍 总结:HttpURLConnection用来发送和接收数据. 2.ANR异常报错 (1)ANR(Application not response) 应用无响应, 主线程(UI线程) (2)如 ...
- Android 给WebView设置Cookie
最近项目中用到WebView访问新浪支付页面,有个要求是必须是登录状态,否则会报Token过期,然后我简单的将我从cookie中取得的ticket,即一串数字可以代表用户登录的唯一标识作为参数拼接到u ...
随机推荐
- 【Android 应用开发】Android 平台 HTTP网速測试 案例 API 分析
作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速測试标准 : 除普通网页測速 ...
- C++实现位数组
当我们遇到大量整数排序时候为了节省内存空间我们能够考虑使用bit数组来实现,缺点是其仅仅适用于正整数. 思想: 在32位系统一个int类型占4个字节,按位来计算一个int类型能够记录32个数.因此,採 ...
- BZOJ 4027: [HEOI2015]兔子与樱花 贪心
4027: [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号 ...
- hdoj--2803--The MAX(水题)
The MAX Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- docker迁移步骤
1. 创建快照:docker commit -p 30b8f18f20b4 container-backup (可以通过docker images 查看docker镜像) 2. 镜像保存在本地机器中: ...
- 深度理解Jquery 中 scrollTop() 方法
这是工作遇到scrollTop() 方法.为了强化自己,把它记录在博客园当中. 下面就开始scrollTop 用法讲解: scrollTop() 定义和用法 scrollTop() 方法设置或返回被选 ...
- Exception异常常见属性
废话少说,直接上代码: try { int n = Convert.ToInt32("@"); } catch(Exception ex) { Console.WriteLine( ...
- Windos下的6种IO模型简要介绍
windows进行数据的收发有6种IO模型.分别是阻塞(blocking)模型,选择(select)模型,异步选择(WSAAsyncSelect)模型,事件选择(WSAEventSelect )模型, ...
- SSH三个主流框架环境的搭建
part 1 Hibernate环境的搭建 part2 struts2环境的搭建 第一步:从struts2官网下载需要的各种资料和jar包 第二步:在ecplise里面创建web项目,然后在web ...
- java ScriptEngine 使用 (java运行脚本文件)
转自:http://www.tuicool.com/articles/imEbQbA Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScri ...