2015-04-21 12 views
9

मैं Fresco लाइब्रेरी का उपयोग कर रहा हूं।एंड्रॉइड - फ़्रेस्को डिस्क कैश से छवि फ़ाइल कैसे प्राप्त करें?

मुझे फ्र्रेस्को दस्तावेज़, में कोई संबंधित जानकारी नहीं मिल रही है मैं फ़्रेस्को की डिस्क कैश से छवि फ़ाइल कैसे प्राप्त कर सकता हूं?

+0

जबकि मैं आपके प्रश्न का उत्तर नहीं दे सकता हूं, मैं उत्सुक हूं कि आप ग्लाइड या पिकासो के बजाए इस नए नए lib का उपयोग क्यों कर रहे हैं, जिसे पर्याप्त रूप से दस्तावेज किया गया है? – Stan

+0

@Stan मुझे जवाब में भी रूचि है क्योंकि मैंने उस lib को आजमाने का फैसला किया था। क्यूं कर? 'क्योंकि यह कुछ दिलचस्प विशेषताएं प्रदान करता है जिनमें पिकासो नहीं है, जैसे कि [प्रगतिशील जेपीईजी स्ट्रीमिंग] (http://frescolib.org/docs/progressive-jpegs.html#_) – Droidman

+1

1. हां, हम प्रगतिशील जेपीईजी का उपयोग कर रहे हैं। 2. यह नया है। सभी नई चीजें दिलचस्प हैं) –

उत्तर

2

मुझे आशा है कि इस मदद करता है

चेक Plamenkos इस लिंक पर जवाब देने के .. https://github.com/facebook/fresco/issues/80

यदि आप एक एन्कोड छवि के लिए पाइप लाइन से पूछते हैं, और ImageRequestBuilder.setLowestPermittedRequestLevel साथ DISK_CACHE निर्दिष्ट करते हैं, पाइपलाइन आप जेपीईजी बाइट्स वापस आ जाएगी अगर छवि डिस्क कैश तक कहीं भी पाई जाती है, या छवि को नहीं मिला है और पूर्ण-फ़ेच किया जाना चाहिए तो शून्य।

मुझे आशा है कि मैंने आपके प्रश्न को गलत तरीके से समझ नहीं लिया है और गलत जवाब प्रदान नहीं किया है।

4

अगर छवि कैश में डाउनलोड किया है, आप इसे पसंद कर सकते हैं: मुझे लगता है कि आप फ्रेस्को कैश नाम कारण कैश प्राप्त करने की कोशिश कभी नहीं करना चाहिए

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

आंतरिक लागू है।

लेकिन अगर आप को पता है कि क्या एक छवि कैश किए गए हैं, तो आप इस का उपयोग कर सकते हैं:

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); 
} 

इस विधि बहुत तेजी से लौट रहा है, आप यूआई सूत्र में इसका इस्तेमाल कर सकते हैं।

+0

समस्या को हल करने में मेरी मदद करें .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(); 

इस कोड:

.setLowestPermittedRequestLevel(ImageRequest.RequestLevel.DISK_CACHE)

फ्रेस्को पहले डिस्क से अपनी छवि को मिल कर देगा और उसके बाद शुद्ध।

+0

क्षमा करें, एक मिनट के लिए मैंने आपका जवाब गड़बड़ कर दिया। लेकिन इससे मुझे समझने में मदद मिली, इसलिए धन्यवाद! – MPelletier

संबंधित मुद्दे