2013-06-03 3 views
0

서버에서 이미지/비디오를 가져 오는 Android 앱을 개발 중입니다. 디스크에 다운로드 된 정보를 캐시하고 싶지만 캐시에 새 데이터를 넣으려고 할 때 오류가 발생하고 키가 정상적으로 보이기 때문에 이유를 모르겠습니다.DiskLruCache - IllegalArgumentException

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은"정규 표현식과 일치하지 않습니다 다음은 스택 추적입니까?

답변

5

아니요. 귀하의 키에 대문자가 들어 있습니다. 소문자 만 허용됩니다!

+0

을 내가 완전히 모든 것을 설명 좋은 Stracktrace을 발견 그렇고. 알아 내기 위해 코드를 살펴볼 필요가 없습니다. – vRallev

+0

문제는 키가 정규식과 일치하지 않는 이유를 이해할 수 없다는 것이 었습니다. 나는 정규식이 무엇인지주의를 기울이지 않았다! – Alin

+0

아니요, 댓글이 불쾌해서는 안됩니다. 나는 또한 두 번 볼 필요가 있었다. 나는 또한 대문자와 소문자를 동시에 사용하는 데 익숙하다. – vRallev

1

또한 MD5code 이렇게 될 MD5 도구를 사용할 수 있습니다

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(); 
} 
관련 문제