我遇到了PersistentCookieJar的问题。我想用OKHTTP3实现一个静态HTTP客户端,我可以从活动中调用我的不同方法,并将响应中的令牌保存到SharedPrefs。当我按照Github上的文档执行此操作时...
ClearableCookieJar cookieJar =
new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
public static OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
...我收到错误'非静态字段'cookieJar'无法从静态上下文中引用'。好!当然,所以我尝试了不同的解决方案,AndroidStudio给了我(比如使这个类非静态......)但没有什么能帮我解决问题。另一种“解决”这个问题的方法(如Android Studio所说)是声明ClearableCookieJar
静态,然后我在获取上下文时遇到麻烦......有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
问题在于一个是静态的而不是另一个。因此,如果您从static
删除OkHttpClient
(如Android Studio建议的那样),它应该可以正常工作:
ClearableCookieJar cookieJar =
new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
现在的问题是您希望OkHttpClient
成为static
的原因。如果您希望能够从应用程序中的多个位置访问您的客户端,为什么不在Application
课程中初始化它?
public class CustomApplication extends Application {
private static OkHttpClient sOkHttpClient;
@Override
public void onCreate() {
super.onCreate();
initializeClient();
}
private void initializeClient() {
ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
sOkHttpClient = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
}
public static OkHttpClient getClient() {
return sOkHttpClient;
}
}
或者,如果您想获得幻想,可以实现依赖注入框架,例如Dagger
。