2017-06-05 20 views
9

Przesyłam obraz do mojego serwera i po przesłaniu mój serwer odpowiada nowym identyfikatorem URI (może to być ten sam adres URL co stary), chcę usunąć stary buforowany obraz i wstaw nowy dla nowego URI.Fresco programowo dodaje Bitmap do pamięci podręcznej

staram się tego dokonać wykonując:

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

Nie ma żadnych wyjątków, ale nadal tylko zobaczyć stare zdjęcie.

+0

W [to] (https://stackoverflow.com/a/30256786/2910520) Odpowiedź one użyłem metody .remove() wywołującej je z 'getImagePipelineFactory(). [from_to_delete] .remove (...)' podczas gdy używasz eksmitów. Możesz spróbować z tym i zobaczyć, czy pomaga (może nie będzie działać dla ciebie, ponieważ odpowiedź ma 2 lata, a biblioteka Fresco prawdopodobnie coś zmieniła w międzyczasie) – MatPag

+0

@MatPag Widziałem tę odpowiedź, wyraźnie nie działa dla mnie. – Arbitur

+0

Powiedziałeś, że widzisz tylko stary obraz. Jak to przetestowałeś? –

Odpowiedz

1

Rozwiązałem go, to był błąd z formatem Uri dla nowego Uri ...

+1

Kolejna warta uwagi: jeśli ładujesz ImageView w RecyclerView.ViewHolder -> musisz upewnić się, że pierwszy wiersz, do którego zadzwonisz, OnBindViewHolder ma ustawić źródło obrazu na NULL. Dzięki temu obraz nie jest ponownie wykorzystywany z puli. – 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())); 
Powiązane problemy