com.octo.android.robospice를 올바르게 사용하는 방법 비트 맵을 캐시합니다

StackOverflow https://stackoverflow.com//questions/20007452

문제

여기에서 찾은이 예제를 사용하고 있습니다. "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 메소드의 항목을 다시 주문했으며 이제는 일하고 있습니다.

http://grepcode.com/file/repo1.maven.org/maven2/com.octo.android.robospice/robospice-cache/1.3.1/com/octo/1.3.1/com/octo/Android / Robospice / Persistence / Cachemanager.java

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top