[置顶] NoHttp详解之Android如何管理Cookie

NoHttp使用之自动管理Cookie

技术交流1群:46523908
技术交流2群:46505645
NoHttp 源码及Demo托管在Github欢迎大家Star:https://github.com/Y0LANDA/NoHttp

NoHttp是专门做Android网络请求与下载的框架。

AndroidStuio和Eclipse怎么使用NoHttp

见视频,视频来自直播,欢迎大家加上面的QQ群来看我直播。

NoHttp自动管理Cookie

  NoHttp是一个很优秀的框架,比Volley强大多了,而且自动维持Cookie,尤其缓存功能强大,但是今天我们主要来看看NoHttp的Cookie怎么玩。
  其实NoHttp的Cookie功能已经和浏览器功能一模一样了,但是我们开发中难免有一些变态的要求,所以我们来看看NoHttp为我们提供了什么样的特别操作呢?

怎么从NoHttp拿到Cookie呢?

  1. NoHttp自动维持Cookie,实现了和浏览器一样的功能;并且开发者可以自己从响应中拿到Cookie;

第一种
  从某个响应拿到某个请求指定的Cookie,下文的HttpCookie是Java自带的一个类:

List<HttpCookie> cookies = Response.getHeaders().getCookies();

第二种
  从CookieManager中拿到所有的Cookie,比如我们要把Cookie共享给WebView的时候:

CookieManager cookieManager = (CookieManager)NoHttp.getDefaultCookieHandler();
List<HttpCookie> cookies = cookieManager.getCookieStore().getCookies();

  可以看到是先从NoHttp拿到NoHttp默认的CookieManager,然后拿到CookieStore,然后拿到所有的Cookie。

用NoHttp怎么人工管理

  1. 如果不想让NoHttp管理Cookie,我们想自己管理怎么办?
      通过NoHttp.setDefaultCookieHandler()设置CookieManager,这个CookieManager系统java.net包下的,我们只要传CookieStore进去就可以了。但是要想实现Cookie持久化可不是一个简单的事情,这里呢还是推荐大家直接使用NoHttp,不过呢大家可以尝试着写一下。
NoHttp.setDefaultCookieHandler(new CookieManager(cookieStore, CookiePolicy.ACCEPT_ALL));
  1. 如果我们想干涉NoHttp的Cookie管理过程怎么办?
      通过系统的CookiManager拿到NoHttp的DiskCookieStore,然后设置一CookieStoreListener:
CookieManager cookieManager = (CookieManager)NoHttp.getDefaultCookieHandler();
DiskCookieStore cookieStore = (DiskCookieStore)cookieManager.getCookieStore();
cookieStore.setCookieStoreListener(new CookieManagerListener());

  我们看看CookieListener有什么功能:

 */
public class CookieManagerListener implements CookieStoreListener {

    /** * 当NoHttp的Cookie被保存的时候被调用 */
    @Override
    public void onSaveCookie(URI uri, HttpCookie cookie) {
        // 保存100year
        // cookie.setMaxAge(HttpDateTime.getMaxExpiryMillis());

        // 或者那个某个请求的Cookie改变原来的值
        String path = uri.getPath();
        if (!TextUtils.isEmpty(path) && path.equals(cookie.getPath())) {
            // cookie.setMaxAge(HttpDateTime.getMaxExpiryMillis());
        }
    }

    /** * 当NoHttp的Cookie过期时被删除时此方法被调用 */
    @Override
    public void onRemoveCookie(URI uri, HttpCookie cookie) {
    }

}

  也就是在Cookie被保存或者Cookie被移除时通知了开发者,我们可以在保存之前改变Cookie的某些属性,或者在移除的时候我们做一些特殊的操作。

NoHttp 源码及Demo托管在Github欢迎大家Star:https://github.com/Y0LANDA/NoHttp

你可能感兴趣的:(android,cookie,持久化Cookie,NoHttp,安卓管理Cookie)