Переглянути джерело

增加一个缓存模式:READ_CACHE_NO_THEN_NETWORK_THEN_WRITE_CACHE
先读缓存,如果读不到就请求网络,完成后写缓存

进阶的面条 4 роки тому
батько
коміт
cb8dcea494

+ 23 - 0
kalle/src/main/java/com/yanzhenjie/kalle/simple/BasicWorker.java

@@ -151,6 +151,13 @@ abstract class BasicWorker<T extends SimpleRequest, S> implements Callable<S>, C
                 }
                 break;
             }
+            case READ_CACHE_NO_THEN_NETWORK_THEN_WRITE_CACHE: {
+                Cache cache = mCacheStore.get(mRequest.cacheKey());
+                if (cache != null) {
+                    return buildResponse(cache.getCode(), cache.getHeaders(), cache.getBody());
+                }
+                break;
+            }
         }
         return null;
     }
@@ -174,6 +181,11 @@ abstract class BasicWorker<T extends SimpleRequest, S> implements Callable<S>, C
                 // Nothing.
                 break;
             }
+            case READ_CACHE_NO_THEN_NETWORK_THEN_WRITE_CACHE: {
+                Cache cacheEntity = mCacheStore.get(mRequest.cacheKey());
+                if (cacheEntity != null) attachCache(cacheEntity.getHeaders());
+                break;
+            }
         }
     }
 
@@ -217,6 +229,10 @@ abstract class BasicWorker<T extends SimpleRequest, S> implements Callable<S>, C
                 }
                 break;
             }
+            case READ_CACHE_NO_THEN_NETWORK_THEN_WRITE_CACHE: {
+                detachCache(code, headers, body, MAX_EXPIRES);
+                break;
+            }
         }
     }
 
@@ -258,6 +274,13 @@ abstract class BasicWorker<T extends SimpleRequest, S> implements Callable<S>, C
                 }
                 break;
             }
+            case READ_CACHE_NO_THEN_NETWORK_THEN_WRITE_CACHE: {
+                Cache cache = mCacheStore.get(mRequest.cacheKey());
+                if (cache != null) {
+                    return buildResponse(cache.getCode(), cache.getHeaders(), cache.getBody());
+                }
+                break;
+            }
         }
         return null;
     }

+ 5 - 1
kalle/src/main/java/com/yanzhenjie/kalle/simple/cache/CacheMode.java

@@ -54,5 +54,9 @@ public enum CacheMode {
     /**
      * First get the result from the cache, if the cache does not exist, get results from the network, and follow the http protocol.
      */
-    READ_CACHE_NO_THEN_HTTP
+    READ_CACHE_NO_THEN_HTTP,
+    /**
+     * 本地有缓存则读取缓存,如果没有缓存则读取网络并且写入缓存
+     */
+    READ_CACHE_NO_THEN_NETWORK_THEN_WRITE_CACHE
 }