2015-04-21 13 views
9

Sto utilizzando la libreria Fresco.Android - Come ottenere file immagine dalla cache del disco di Fresco?

Non riesco a trovare alcuna informazione correlata nella documentazione di Fresco, come posso ottenere un file immagine dalla cache del disco di Fresco?

+0

Mentre non riesco a rispondere alla tua domanda Im incuriosita perché stai usando questa nuova nuova libreria invece di Glide o Picasso che sono documentati abbastanza bene? – Stan

+0

@Stan Sono anche interessato a una risposta da quando ho deciso di provare quella lib. Perché? Perché offre alcune funzioni interessanti che Picasso non possiede, ad esempio [streaming JPEG progressivo] (http://frescolib.org/docs/progressive-jpegs.html#_) – Droidman

+1

1. Sì, stiamo usando il JPEG progressivo. 2. È nuovo. Tutte le novità sono interessanti) –

risposta

2

Spero che questo aiuta

Controlla Plamenkos risposta su questo link .. https://github.com/facebook/fresco/issues/80

se chiedete cantiere per un'immagine codificata, e specificare DISK_CACHE con ImageRequestBuilder.setLowestPermittedRequestLevel, il gasdotto restituirà i byte JPEG se l'immagine si trova ovunque nella cache del disco, o null se l'immagine non viene trovata e deve essere eseguita una raccolta completa.

Spero di non aver capito male la tua domanda e di fornire una risposta sbagliata.

4

se l'immagine ha il download in cache, è possibile farlo come:

ImageRequest imageRequest=ImageRequest.fromUri(url); 
CacheKey cacheKey=DefaultCacheKeyFactory.getInstance() 
    .getEncodedCacheKey(imageRequest); 
BinaryResource resource = ImagePipelineFactory.getInstance() 
    .getMainDiskStorageCache().getResource(cacheKey); 
File file=((FileBinaryResource)resource).getFile(); 
1

Credo che non si dovrebbe mai cercare di ottenere Affresco Cache nome causa cache è attuare l'interno.

Ma se si vuole sapere se un immagine è stata memorizzata nella cache, è possibile utilizzare questo:

private boolean isDownloaded(Uri loadUri) { 
    if (loadUri == null) { 
     return false; 
    } 
    ImageRequest imageRequest = ImageRequest.fromUri(loadUri); 
    CacheKey cacheKey = DefaultCacheKeyFactory.getInstance() 
      .getEncodedCacheKey(imageRequest); 
    return ImagePipelineFactory.getInstance() 
      .getMainDiskStorageCache().hasKey(cacheKey); 
} 

questo metodo è il ritorno molto veloce, è possibile utilizzarlo in thread dell'interfaccia utente.

+0

Più veloce di ".setLowestPermittedRequestLevel (ImageRequest.RequestLevel. DISK_CACHE) '?? –

1
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(YourImageUrl)) 
      .setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE) 
      .setResizeOptions(new ResizeOptions(width, width)) 
      .build(); 
DraweeController controller = Fresco.newDraweeControllerBuilder() 
      .setOldController(YourImageView.getController()) 
      .setImageRequest(request) 
      .build(); 

Questo codice:

.setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)

renderà affresco ottenere la vostra immagine dal disco e poi la rete.

+0

Mi dispiace, per un minuto ho incasinato la tua risposta. Ma mi ha aiutato a capire, quindi grazie! – MPelletier

Problemi correlati