2016-06-14 1 views
0

PersistentCookieJar에 문제가 있습니다. 나는 OKHTTP3으로 정적 HTTP 클라이언트를 구현하려고합니다.이를 통해 액티비티에서 다른 메소드를 호출하고 SharedPrefs에 대한 응답에서 토큰을 저장할 수 있습니다. 내가 Github에서의 문서 다음은이 ...PersistentCookieJar to SharedPrefs with OKHTTP3

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

문제는 하나가 고정되어 있고 다른 하나는 고정되어 있지 않다는 사실입니다. 따라서 당신이에서 static을 제거 할 경우 OkHttpClient (안드로이드 스튜디오 제안 등)가 잘 작동합니다 : 당신이 원하는 이유

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 같은 의존성 주입 프레임 워크를 구현할 수 있습니다.

+0

이렇게하면 ('Application' 클래스에서 초기화하십시오.)'정적 필드가 아닌 'mOkHttpClient'정적 컨텍스트에서 참조 할 수 없습니다 ':/ – Andy

+0

@Andy 미안 해요. 'mOkHttpClient'에'static' 수정자를 잊었습니다. 수정해야합니다. – Bryan

관련 문제