0

我正在开发一个 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" 与正则表达式不匹配吗?

4

2 回答 2

5

不,它没有。您的密钥包含大写字母。只允许小写!

于 2013-06-03T15:40:07.333 回答
1

你也可以使用 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();
}
于 2016-01-08T09:37:28.647 回答