使用OKHTTP3从响应中将PersistentCookieJar转换为SharedPrefs

时间:2016-06-14 18:09:54

标签: android token okhttp3

我遇到了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静态,然后我在获取上下文时遇到麻烦......有人可以帮我解决这个问题吗?

1 个答案:

答案 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