我使用了@gncabrera 的解决方案,但还创建了一个帮助类来帮助进行初始化,并且还可以轻松地在应用程序中共享 CookieJar。
public class OkHttpClientCreator {
private static CookieJar mCookieJar;
public static OkHttpClient.Builder getNewHttpClientBuilder(boolean isDebug, boolean useCookies) {
if (mCookieJar == null && useCookies) {
mCookieJar = new BasicCookieJar();
}
OkHttpClient.Builder builder = new OkHttpClient.Builder();
if (useCookies) {
builder.cookieJar(mCookieJar);
}
if (isDebug) {
builder.addInterceptor(new LoggingInterceptor());
}
return builder;
}
public static OkHttpClient getNewHttpClient(boolean isDebug, boolean useCookies) {
return getNewHttpClientBuilder(isDebug, useCookies).build();
}
}
日志拦截器在调试模式下用于打印请求信息并共享 cookie jar 实例。跨调用者,以便如果请求需要使用通用的 cookie 处理程序,它们可以。这些 cookie 不会在应用程序启动时持续存在,但这不是我的应用程序的要求,因为我们使用基于令牌的会话,并且对 cookie 的唯一需要是登录和生成令牌之间的时间很短。
注意:BasicCookieJar 与 gncabrera 的 MyCookieJar 实现相同