OkHttp Interceptor 및 Retrofit을 사용한 캐싱
8084 단어 android
이 블로그에서는 오프라인 우선 Android 앱을 빌드하기 위해 OkHttp Interceptor 및 Retrofit을 사용하여 Android에서 HTTP 응답을 캐시하는 방법을 알아봅니다.
이 문서는 원래 amitshekhar.me에 게시되었습니다.
캐싱이 Android 애플리케이션에서 어떻게 도움이 되는지 이해해 봅시다.
이렇게 하면 Android 애플리케이션에서 두 가지 매우 중요한 작업을 수행할 수 있습니다.
이제 OkHttp 및 Retrofit에서 캐싱을 활성화하는 방법을 알아보겠습니다. 그 전에 Retrofit이 HTTP 작업에 OkHttp 클라이언트를 사용한다는 점을 이해해야 합니다. 즉, 캐싱을 활성화하기 위해 수행해야 하는 모든 작업은 OkHttp와 관련이 있어야 합니다. Retrofit은 구성된 OkHttp 클라이언트를 사용하므로 추가 작업을 수행할 필요가 없습니다.
서버에서 이미
Cache-Control
헤더를 활성화하면 상황이 더 쉬워집니다. 그러면 OkHttp는 해당 헤더를 존중하고 서버에서 전송되는 특정 시간 동안 응답을 캐시합니다.그러나
Cache-Control
가 서버에서 활성화되어 있지 않으면 어떻게 됩니까? 여전히 Interceptor를 사용하여 OkHttp 클라이언트의 응답을 캐시할 수 있습니다. 우리는 방법을 배울 것입니다.이를 위해 아래와 같이
Interceptor
를 구현해야 합니다.class CacheInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val response: Response = chain.proceed(chain.request())
val cacheControl = CacheControl.Builder()
.maxAge(10, TimeUnit.DAYS)
.build()
return response.newBuilder()
.header("Cache-Control", cacheControl.toString())
.build()
}
}
여기에서
CacheInterceptor
를 구현하여 Interceptor
를 생성했으며 CacheControl
에 대한 헤더를 제공하는 데 사용되는 Cache-Control
빌더가 있습니다.그런 다음
CacheInterceptor
를 사용하여 이 OkHttpClient
를 addNetworkInterceptor
에 추가해야 합니다.val okHttpClient = OkHttpClient().newBuilder()
.addNetworkInterceptor(CacheInterceptor())
.build();
그런 다음 이
okHttpClient
를 직접 또는 Retrofit과 함께 사용할 수 있습니다.그러나 오프라인 우선 앱을 구축하면서 이해해야 할 캐치가 있습니다.
OkHttp는 인터넷을 사용할 수 있을 때만 캐시된 응답을 반환하도록 설계되었습니다.
이 문제를 해결하는 방법?
위의 것(
ForceCacheInterceptor
, 서버에서 CacheInterceptor
헤더가 활성화되지 않은 경우에만) 외에 Cache-Control
를 만들 수 있습니다.class ForceCacheInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val builder: Request.Builder = chain.request().newBuilder()
if (!IsInternetAvailable()) {
builder.cacheControl(CacheControl.FORCE_CACHE);
}
return chain.proceed(builder.build());
}
}
그런 다음 아래와 같이
OkHttpClient
에 인터셉터를 추가합니다.val okHttpClient = OkHttpClient().newBuilder()
.addNetworkInterceptor(CacheInterceptor()) // only if Cache-Control header is not enabled from the server
.addInterceptor(ForceCacheInterceptor())
.build();
여기서
ForceCacheInterceptor
가 아닌 OkHttpClient
를 사용하여 addInterceptor()
에 addNetworkInterceptor()
를 추가하고 있음을 알아야 합니다.addInterceptor
: 응용 프로그램 수준에서 인터셉터를 추가하는 데 사용됩니다. addNetworkInterceptor
: 이름에서 알 수 있듯이 네트워크 수준에서 인터셉터를 추가하는 데 사용됩니다. 그런 다음 이
okHttpClient
를 직접 또는 Retrofit과 함께 사용할 수 있으며 예상대로 작동합니다.오프라인 우선 Android 앱을 빌드하기 위해 OkHttp Interceptor 및 Retrofit을 사용하여 Android에서 HTTP 응답을 캐시하는 방법입니다.
지금은 그게 다입니다.
감사
Amit Shekhar
다음에서 나와 연결할 수 있습니다.
Reference
이 문제에 관하여(OkHttp Interceptor 및 Retrofit을 사용한 캐싱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amitiitbhu/caching-with-okhttp-interceptor-and-retrofit-ojo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)