package com.qlzgzg.nettrade.android.cookie;
import android.content.Context;
import com.qlzgzg.nettrade.android.application.LogManager;
import com.qlzgzg.nettrade.android.application.MyApplication;
import java.net.CookieStore;
import java.net.HttpCookie;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class PersistentCookieStoreS implements CookieStore {
private static HashMap<String, ConcurrentHashMap<String, HttpCookie>> cookies;
private Context mContext;
public PersistentCookieStoreS (Context context) {
cookies = new HashMap<String, ConcurrentHashMap<String, HttpCookie>>();
mContext = context;
HashMap<String, ConcurrentHashMap<String, HttpCookie>> cookieHashMap = ((MyApplication)mContext.getApplicationContext()).getCookies();
if ((cookieHashMap != null) && (cookieHashMap.size() != 0)) {
cookies = ((MyApplication)mContext.getApplicationContext()).getCookies();
}
}
@Override
public void add(URI uri, HttpCookie cookie) {
// Save cookie into local store, or remove if expired
if (!cookie.hasExpired()) {
if(!cookies.containsKey(cookie.getDomain()))
cookies.put(cookie.getDomain(), new ConcurrentHashMap<String, HttpCookie>());
cookies.get(cookie.getDomain()).put(cookie.getName(), cookie);
} else {
if(cookies.containsKey(cookie.getDomain()))
cookies.get(cookie.getDomain()).remove(cookie.getDomain());
}
((MyApplication)mContext.getApplicationContext()).setCookies(cookies);
}
@Override
public List<HttpCookie> get(URI uri) {
ArrayList<HttpCookie> ret = new ArrayList<HttpCookie>();
for (String key:cookies.keySet()){
if (uri.getHost().contains(key)){
ret.addAll(cookies.get(key).values());
}
}
return ret;
}
@Override
public List<HttpCookie> getCookies() {
ArrayList<HttpCookie> ret = new ArrayList<HttpCookie>();
for (String key : cookies.keySet())
ret.addAll(cookies.get(key).values());
return ret;
}
@Override
public List<URI> getURIs() {
ArrayList<URI> ret = new ArrayList<URI>();
for (String key : cookies.keySet())
try {
ret.add(new URI(key));
} catch (URISyntaxException e) {
LogManager.e("PersistentCookieStoreS", e.toString());
}
return ret;
}
@Override
public boolean remove(URI uri, HttpCookie cookie) {
String name = getCookieToken(uri, cookie);
if(cookies.containsKey(uri.getHost()) && cookies.get(uri.getHost()).containsKey(name)) {
cookies.get(uri.getHost()).remove(name);
return true;
} else {
return false;
}
}
@Override
public boolean removeAll() {
cookies.clear();
return true;
}
protected String getCookieToken(URI uri, HttpCookie cookie) {
return cookie.getName() + cookie.getDomain();
}
}
引用代码
OkHttpClient client = new OkHttpClient();
client.setCookieHandler(new CookieManager(new PersistentCookieStoreS(context), CookiePolicy.ACCEPT_ALL));