我正在开发一个Android应用程序,我正在从服务器上获取一些图像/视频。我想将下载的信息缓存到磁盘上,但当我尝试将新数据放到缓存中时,发生了一个错误,我不知道为什么,因为密钥似乎是正确的。下面是堆栈跟踪:
06-03 18:27:38.942: E/AndroidRuntime(10893): java.lang.IllegalArgumentException: keys must match regex [a-z0-9_-]{1,64}: "mYUb5gz5gx"
06-03 18:27:38.942: E/AndroidRuntime(10893): at com.jakewharton.DiskLruCache.validateKey(DiskLruCache.java:633)
06-03 18:27:38.942: E/AndroidRuntime(10893): at com.jakewharton.DiskLruCache.edit(DiskLruCache.java:421)
06-03 18:27:38.942: E/AndroidRuntime(10893): at com.jakewharton.DiskLruCache.edit(DiskLruCache.java:416)
06-03 18:27:38.942: E/AndroidRuntime(10893): at com.licenta.mementoapp.utils.DiskLruImageCache.put(DiskLruImageCache.java:69)
06-03 18:27:38.942: E/AndroidRuntime(10893): at com.licenta.mementoapp.datafragments.PhotosFragment$1$1.done(PhotosFragment.java:92)键="mYUb5gz5gx“是否与正则表达式匹配?
发布于 2013-06-03 23:40:07
不,它不是。你的钥匙包含大写字母。只允许小写!
发布于 2016-01-08 17:37:29
您还可以使用MD5工具作为MD5code,如下所示:
public static String hashKeyForDisk(String key) {
String cacheKey;
try {
final MessageDigest mDigest = MessageDigest.getInstance("MD5");
mDigest.update(key.getBytes());
cacheKey = bytesToHexString(mDigest.digest());
} catch (NoSuchAlgorithmException e) {
cacheKey = String.valueOf(key.hashCode());
}
return cacheKey;
}
private static String bytesToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}https://stackoverflow.com/questions/16900548
复制相似问题