2017-06-05 40 views
9

我將圖像上傳到我的服務器,一旦上傳我的服務器響應新的URI(可能與舊的URL相同),我想刪除舊的緩存圖像,爲新的URI插入新的。Fresco以編程方式將位圖添加到緩存

我嘗試做來實現:

// Retrofit2 onResponse 

String newImageUri = response.body().getUri(); 
String oldImageUri = Preferences.getUser().getImageUrl(); 

// Remove old image from cache 
Fresco.getImagePipeline().evictFromCache(Uri.parse(oldImageUri));    
Fresco.getImagePipeline().evictFromDiskCache(Uri.parse(oldImageUri)); 
Fresco.getImagePipeline().evictFromMemoryCache(Uri.parse(oldImageUri)); 
Fresco.getImagePipelineFactory().getMainFileCache().remove(new SimpleCacheKey(oldImageUri)); 

// Insert new image at new URI 
try { 
    Fresco.getImagePipelineFactory().getMainFileCache().insert(new SimpleCacheKey(newImageUri), new WriterCallback() { 
     @Override 
     public void write(OutputStream os) throws IOException { 
      os.write(imageData); // byte[] or the new Bitmap 
     } 
    }); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 
uriProfileImage.setImageURI(newImageUri); 

有沒有例外,但我仍然只看到舊的圖像。

+0

在[這](https://stackoverflow.com/a/30256786/2910520)答案,在使用evict的時候,使用了從'getImagePipelineFactory()。[from_to_delete] .remove(...)'調用它們的.remove()方法。你可以嘗試這個,看看是否有幫助(也許不會爲你工作,因爲答案是2年,而Fresco庫可能已經改變了一些東西在此期間) – MatPag

+0

@MatPag我看到了答案,顯然它不適合我。 – Arbitur

+0

你說你只看到舊圖像。你是怎麼測試這個的? –

回答

1

我解決了這個問題,它是與開放的格式爲新的URI的錯誤...

+1

另一個值得注意的地方是:如果你在一個RecyclerView.ViewHolder中加載ImageView - >你需要確保你在OnBindViewHolder中調用的第一行是將imageview source設置爲null。這確保圖像不會從池中重用。 – apelsoczi

-1
Uri uri = Uri.parse("http://frescolib.org/static/fresco-logo.png"); 
Fresco.getImagePipelineFactory().getMainDiskStorageCache().remove(new CacheKey(uri.toString())); 
Fresco.getImagePipelineFactory().getSmallImageDiskStorageCache().remove(new CacheKey(uri.toString())); 
相關問題