MarioBoy

OkHttp之cookies持久化管理
OkHttp之cookies持久化管理OkHttp简介一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移...
扫描右侧二维码阅读全文
01
2018/08

OkHttp之cookies持久化管理

OkHttp之cookies持久化管理

OkHttp简介

一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付square公司贡献(该公司还贡献了Picasso)

用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,现在已经打不出来)

它可以用在java和Android程序里。

这是它的官方主页square.github.io/okhttp/

在它的官方主页的介绍里,我们可以看到它的使用非常简洁,和python下的requests库有一拼,都是http for humans!

Cookies持久化管理

想把cookies保持在本地,基本上有两种方法

  • 把cookies写入内存,但是这种方法在app退出后就会失效。
  • 写入SharedPrefs

在github上已经有人写出了cookie持久化管理的插件。

PersistentCookieJar

主页A persistent CookieJar implementation for OkHttp 3 based on SharedPreferences.

persistentcookiejar的用法非常简单

  • 在项目的更目录下的build.gradle文件下加入它的maven地址

    allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }
  • 加入依赖

    dependencies {
        compile 'com.github.franmontiel:PersistentCookieJar:v1.0.1'
    }
  • 创建一个persistentcookiejar的实例,并且传进cookiecache和CookiePersistor

    ClearableCookieJar cookieJar =
                    new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
  • 然后把cookiejar加入你的okhttpclient里面

    OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .cookieJar(cookieJar)
                    .build();

创建全局的Okhttpclient

如果你创建多个okhttpclient,那么以后创建的client就会失去对cookiejar的引用,即使你重新创建一个cookiejar,也将失去之前的co0kie

所以必须创建一个全局的client

okhttp官网的推荐是在一个app里面使用一个client,可以通过clone方法来实现okhttp client的传递

我这里使用了另一个方法。

Android提供了一个Application类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。而我们可以自己定制一个Application类,以便于管理一些全局的信息。所以我们可以在一个Application类里写入一个okhttpClient。使用它来进行全局的http连接。

  • 首先创建一个MyApplication类
public class MyApplication extends Application {
    private static Context context;
    public static ClearableCookieJar cookieJar;

   public static OkHttpClient okHttpClient;
    @Override
    public void onCreate(){
        super.onCreate();
        context=getApplicationContext();
        cookieJar=new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(getContext()));
        okHttpClient=new OkHttpClient.Builder().cookieJar(cookieJar).build();
    }
    public static Context getContext(){
        return context;
    }
}
  • 然后指定一下app启动的时候初始化MyApplication类,而不是默认的application类。

这一步也很简单。在AndroidMainfest.xml文件的<application>标签下进行指定就可以了

<application 

​    android:name="com.example.networkhttp.MyApplication"

​    ...>

​    ...

</application>

这样以后不管在任何地方使用okhttpclient都可以使用MyApplication.okhttpClient了,也就实现了cookie的持久化管理。

进阶

有关Okhttp的高阶使用方法,课一参考官网和下面的链接

https://blog.csdn.net/u013651026/article/details/79738059

persistentcookiejar https://github.com/franmontiel/PersistentCookieJar

Last modification:August 1st, 2018 at 05:24 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment