• 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。

    
    
    
       
    
  • 相关阅读:
    html之长文本框置顶
    Red Hat Enterprise Linux Server 6.5安装GCC 4.9.2
    精通正则表达式
    解决UNION ALL合并两个结果集后排序的问题
    ELK搭建日志管理系统记录
    Spring Boot使用@ConfigurationProperties 读取自定义的properties的方法
    maven配置profile,按指定环境打包
    java自定义标签,tld文件,获取数据字典的值
    JAVA实现RSA签名、验签
    jquery.validate.js中的remote用法
  • 原文地址:https://www.cnblogs.com/llguanli/p/7007075.html
Copyright © 2020-2023  润新知