diff options
Diffstat (limited to 'AndroidAsync')
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseCacheMiddleware.java | 4 | ||||
-rw-r--r-- | AndroidAsync/src/com/koushikdutta/async/util/FileCache.java | 49 |
2 files changed, 17 insertions, 36 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseCacheMiddleware.java b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseCacheMiddleware.java index ee2a108..614ba40 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseCacheMiddleware.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/cache/ResponseCacheMiddleware.java @@ -104,7 +104,7 @@ public class ResponseCacheMiddleware extends SimpleMiddleware { return null; } - String key = cache.toKeyString(data.request.getUri()); + String key = FileCache.toKeyString(data.request.getUri()); FileInputStream[] snapshot = null; long contentLength; Entry entry; @@ -267,7 +267,7 @@ public class ResponseCacheMiddleware extends SimpleMiddleware { return; } - String key = cache.toKeyString(data.request.getUri()); + String key = FileCache.toKeyString(data.request.getUri()); RawHeaders varyHeaders = requestHeaders.getHeaders().getAll(networkResponse.getVaryFields()); Entry entry = new Entry(data.request.getUri(), varyHeaders, data.request, networkResponse.getHeaders()); BodyCacher cacher = new BodyCacher(); diff --git a/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java b/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java index 548924f..d117108 100644 --- a/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java +++ b/AndroidAsync/src/com/koushikdutta/async/util/FileCache.java @@ -19,9 +19,6 @@ import java.util.Set; * Created by koush on 4/12/14. */ public class FileCache { - - private MessageDigest messageDigest; - class CacheEntry { final long size; public CacheEntry(File file) { @@ -65,16 +62,23 @@ public class FileCache { return null; } - public String toKeyString(Object... parts) { - synchronized (FileCache.class) { // I spreaded synchronized block to whole method to assure - // that only one thread deals with our copy of MessageDigest - // instance - for (Object part : parts) { - messageDigest.update(part.toString().getBytes()); + public static String toKeyString(Object... parts) { + MessageDigest messageDigest; + synchronized (FileCache.class) { + try { + messageDigest = MessageDigest.getInstance(hashAlgorithm); + } catch (NoSuchAlgorithmException e) { + messageDigest = findAlternativeMessageDigest(); + if (null == messageDigest) + throw new RuntimeException(e); } - byte[] md5bytes = messageDigest.digest(); - return new BigInteger(1, md5bytes).toString(16); } + + for (Object part : parts) { + messageDigest.update(part.toString().getBytes()); + } + byte[] md5bytes = messageDigest.digest(); + return new BigInteger(1, md5bytes).toString(16); } boolean loadAsync; @@ -271,33 +275,10 @@ public class FileCache { this.loadAsync = loadAsync; cache = new InternalCache(); - try { - messageDigest = (MessageDigest) MessageDigest.getInstance(hashAlgorithm); - cloneMessageDigest(messageDigest); - } catch (NoSuchAlgorithmException e1) { - messageDigest = findAlternativeMessageDigest(); - if (null == messageDigest) - throw new RuntimeException(e1); - cloneMessageDigest(messageDigest); - } - directory.mkdirs(); doLoad(); } - // taken from https://github.com/candrews/HttpResponseCache/commit/a93c92d1d8b87778ac7bb2fa2fe2759e7ca06219 - private void cloneMessageDigest(MessageDigest messageDigest){ - try { - // clone the messageDigest instance as a workaround for - // java.security.MessageDigest.getInstance(String) not being thread safe in Android - // see https://code.google.com/p/android/issues/detail?id=37937 - messageDigest = (MessageDigest) messageDigest.clone(); - } catch (CloneNotSupportedException e) { - // ignore the exception and use the original messageDigest. - // hopefully whatever platform we're on doesn't have the bug that requires the cloning workaround - } - } - public long size() { return cache.size(); } |