okhttp2.0 cookie持久化

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));


猜你喜欢

转载自blog.csdn.net/bruse1990/article/details/52928158