Okhttp cookie获取、持久化存储、设置到webview(腾讯tbs浏览器)
1、Okhttp获取cookie
其实okhttp提供了cookie管理的接口CookieJar,我们只需要继承CookieJar即可
每次okhttp发起请求都会调用:加载saveFromResponse方法,将cookie放、返回给我们;每次请求返回是都会调用loadForRequest方法,我们将自己保存的cookie带入即可;
//保存cookie
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
if (cookies != null && cookies.size() > 0) {
//保存cookie操作
}
}
//加载cookie
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url);
return cookies;
}
2、okhttp cookie存储持久化
因为okhttp只提供cookie处理方法,不提供保存方法,所以需要自己保存
此处我们保存至手机本地内存中
此处直接贴出保存的的PersistentCookieStore类
public class PersistentCookieStore {
private static final String LOG_TAG = "PersistentCookieStore";
private static final String COOKIE_PREFS = "Cookies_Prefs";
private final Map<String, ConcurrentMap<String, Cookie>> cookies;
private final SharedPreferences cookiePrefs;
public PersistentCookieStore(Context context) {
cookiePrefs = context.getSharedPreferences(COOKIE_PREFS, 0);
ConcurrentMap<String, Cookie> cmp=new ConcurrentHashMap<String, Cookie>();
cookies = new HashMap<String, ConcurrentMap<String, Cookie>>();
//将持久化的cookies缓存到内存中 即map cookies
Map<String, ?> prefsMap = cookiePrefs.getAll();
for (Map.Entry<String, ?> entry : prefsMap.entrySet()) {
String[] cookieNames = TextUtils.split((String) entry.getValue(), ",");
for (String name : cookieNames) {
String encodedCookie = cookiePrefs.getString(name, null);
if (encodedCookie != null) {
Cookie decodedCookie = decodeCookie(encodedCookie);
if (decodedCookie !