2016-08-15 1 views
0

사용자 개조, 제발, Retrofit으로 캐싱하는 데 문제가 있습니다. 나는 다음과 같은 응답을 전송하는 서버가Retrofit으로 캐싱 안드로이드

서버 : 아파치 X-구동 - 기준 : PHP/5.5.38 앱 버전 : { "ID": 3, "current_version": "0.2", "required": "true", "build_date": "17-6-2016"} Cache-Control : public, max-age = 300, 캐시 된 경우, max-stale = 86400 업그레이드 : h2 연결 : 전송 인코딩을 업그레이드 : 응답이 제대로 캐시됩니다 발리와 응용 프로그램/JSON

하지만 개조로는하지 않을 : 콘텐츠 형식을 청크. 나는이

> Cache cache = new Cache(cacheDir, cacheSize); 
>   httpClient=new OkHttpClient(); 
>   httpClient.setCache(cache); 
>   httpClient.networkInterceptors().clear(); 
>   httpClient.networkInterceptors().add(new NetworkInterceptor()); 
>   restService=new Retrofit.Builder() 
>     .baseUrl(HOST_URL) 
>     .addConverterFactory(GsonConverterFactory.create()) 
>     .client(httpClient) 
>     .build() 
>     .create(RestService.class); 

처럼 개조 클라이언트와

공용 클래스 NetworkInterceptor가 인터셉터를 구현하는 네트워크 인터셉터 { 공공 정적 최종 문자열 DEBUG_TAG = NetworkInterceptor.class.getSimpleName() 설정을 가지고;

@Override 
public Response intercept(Chain chain) throws IOException { 
    Request request=chain.request(); 
    User user=UserHandler.getUser(); 
    if (user!=null&&user.getToken()!=null){ 
     Log.d(DEBUG_TAG,"Authorization: "+user.getToken()); 
     request=request.newBuilder().addHeader("Authorization",user.getToken()) 
       .method(request.method(),request.body()) 
       .build(); 
    } 
    Response response = chain.proceed(request); 
    Log.d(DEBUG_TAG, "Cache-Control: " + response.cacheControl()); 
    return response; 
} 

}

캐시 폴더가 생성되지만 유일한 폴더는 "저널"폴더가 있습니다. 서버 또는 Android 클라이언트를 변경하거나 추가하려면 무엇이 필요합니까? 어떤 도움을 주시면 감사하겠습니다.

답변

0

Cache-Control을 헤더에 추가하는 것을 잊었습니다.

NetworkInterceptor implements Interceptor { 

    public static final String DEBUG_TAG = NetworkInterceptor.class.getSimpleName(); 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request=chain.request(); 
     User user=UserHandler.getUser(); 
     if (user!=null&&user.getToken()!=null){ 
      Log.d(DEBUG_TAG,"Authorization: "+user.getToken()); 
      request=request.newBuilder().addHeader("Authorization",user.getToken()) 
             // Only if the response is stored 
             .addHeader("Cache-Control", "only-if-cached") 
             // Return cached responses not older than 2419200 seconds (28 days)          
             //.addHeader("Cache-Control", "max-stale=2419200") 
             .method(request.method(),request.body()) 
             .build(); 
     } 
     Response response = chain.proceed(request); 
     Log.d(DEBUG_TAG, "Cache-Control: " + response.cacheControl()); 
     return response; 
    } 
}