com.octo.android.robospice를 올바르게 사용하는 방법 비트 맵을 캐시합니다
문제
여기에서 찾은이 예제를 사용하고 있습니다. "Nofollow"> https://github.com/octo-online/robospice/wiki/starter-guide.
캐싱으로 비트 맵 요청을 지원하도록 확장하려고 시도했습니다. verbose로 설정된 LogCat을 사용하면 비트 맵이 캐시에 성공적으로 저장되고 있음을 나타내는 로그 메시지가 표시되지만 다음 로그 메시지에서 실패한 메시지가 실패합니다.
11-15 09 : 14 : 02.694 : D // requestrunner.java : 102 (5462) : com.octo.android.robospice.persistence.exception.cacheloadingException : org.codehaus.jackson.map.jsonmappingException : [간단한 유형, Class Android.Graphics.Bitmap] 유형에 적합한 생성자가 발견되지 않았습니다. JSON 객체에서 인스턴스화 할 수 없습니다 (유형 정보 추가 / 활성화 필요 "
여기에 JSONSpiceFactory의 관련 코드가 있습니다.
@Override
public CacheManager createCacheManager(Application application) {
CacheManager cacheManager = new CacheManager();
try {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
JacksonObjectPersisterFactory jacksonObjectPersisterFactory = new JacksonObjectPersisterFactory(application);
cacheManager.addPersister( jacksonObjectPersisterFactory );
// Try to add support for bitmap caching here
InFileBitmapObjectPersister filePersister = new InFileBitmapObjectPersister(application);
LruCacheBitmapObjectPersister memoryPersister = new LruCacheBitmapObjectPersister(filePersister, cacheSize);
cacheManager.addPersister(memoryPersister);
} catch (CacheCreationException e) {
e.printStackTrace();
}
return cacheManager;
}
.
여기에 캐시 또는 네트워크에서 이미지를로드하도록 Spicemanager 호출을 호출하는 코드가 있습니다.
public void getNetworkBitmap(String url, String cacheKey, GetBitmapListener listener) {
GetMerchantLogoRequest request = new GetMerchantLogoRequest(url);
spiceManager.execute(request, cacheKey, DurationInMillis.ONE_HOUR, new NetworkBitmapRequestListener(listener));
}
private class NetworkBitmapRequestListener implements RequestListener<Bitmap> {
private GetBitmapListener listener;
public NetworkBitmapRequestListener(GetBitmapListener listener) {
this.listener = listener;
}
@Override
public void onRequestFailure(SpiceException spiceException) {
listener.onImageRequestFailure(spiceException);
}
@Override
public void onRequestSuccess(Bitmap logo) {
listener.onImageRequestSuccess(logo);
}
}
.
캐시 데이터에서 비트 맵을 재구성 할 팩토리가 필요합니까? 이것은 JSON 객체가 아니기 때문에 Jackson Json 매핑을 사용하려는 시도를 수정하기 위해 무엇을해야합니까? 잭슨이 add / enable type 정보를 추가하는 경우 옳은 일을 할 것입니까? 어떻게해야합니까?
이 멀리 읽어 주셔서 감사합니다!
-eric
해결책
나는 CacheManager (아래 링크)를 통해 읽고 답변을 발견하고 "모든 요소 [영구] ...)를 순서대로 뒤집어 왔습니다"라는 줄에 틀림 없음이므로 CreateCacheManager 메소드의 항목을 다시 주문했으며 이제는 일하고 있습니다.