CacheInterceptor.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package com.benyanyi.okhttp.config;
  2. import android.content.Context;
  3. import com.benyanyi.okhttp.util.InternetUtil;
  4. import org.jetbrains.annotations.NotNull;
  5. import java.io.IOException;
  6. import okhttp3.CacheControl;
  7. import okhttp3.Interceptor;
  8. import okhttp3.Request;
  9. import okhttp3.Response;
  10. /**
  11. * @author YanYi
  12. * @date 2019-08-12 16:51
  13. * @email ben@yanyi.red
  14. * @overview
  15. */
  16. class CacheInterceptor implements Interceptor {
  17. private Context context;
  18. CacheInterceptor(Context context) {
  19. this.context = context;
  20. }
  21. @NotNull
  22. @Override
  23. public Response intercept(Chain chain) throws IOException {
  24. Request request = chain.request();
  25. if (InternetUtil.isNetWorkConnected(context)) {
  26. request = request.newBuilder()
  27. .cacheControl(CacheControl.FORCE_CACHE)
  28. .build();
  29. }
  30. Response response = chain.proceed(request);
  31. if (!InternetUtil.isNetWorkConnected(context)) {
  32. int maxAge = 0 * 60;
  33. // 有网络时 设置缓存超时时间0个小时
  34. response.newBuilder()
  35. .header("Cache-Control", "public, max-age=" + maxAge)
  36. .removeHeader("Pragma")// 清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
  37. .build();
  38. } else {
  39. // 无网络时,设置超时为4周
  40. int maxStale = 60 * 60 * 24 * 28;
  41. // val maxStale = 0
  42. response.newBuilder()
  43. .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
  44. .removeHeader("Pragma")
  45. .build();
  46. }
  47. return response;
  48. }
  49. }