2016-04-19 6 views
0

Ich habe Bilddatei: //...qgKEIJC5EHey5qLUEDPWazJ9QimqkeQK.jpg wirdWie ich eine Datei aus dem Cache von Imageloader (einschließlich verschiedenen Auflösungen) löschen können

new DisplayImageOptions.Builder() 
       .showImageForEmptyUri(R.drawable.ic_empty) 
       .showImageOnFail(R.drawable.ic_empty) 
       .resetViewBeforeLoading(true) 
       .cacheInMemory(true) 
       .cacheOnDisk(false) 
       .imageScaleType(ImageScaleType.EXACTLY) 
       .bitmapConfig(Bitmap.Config.RGB_565) 
       .build() 

mit Optionen geladen, aber wenn ich diese Datei löschen und entfernt sie aus dem Cache

if (file.exists()) { 
     file.setWritable(true); 
     MemoryCacheUtils.removeFromCache(file.getAbsolutePath(), ImageLoader.getInstance().getMemoryCache()); 
     DiskCacheUtils.removeFromCache(file.getAbsolutePath(), ImageLoader.getInstance().getDiskCache()); 
     boolean deleted = file.delete(); 
     if (!deleted) 
      Log.d("ERROR", ""); 
    } 

Bildlader noch aus dem Speicher-Cache geladen

D/ImageLoader: Display image in ImageAware (loaded from MEMORY_CACHE) [file://.../qgKEIJC5EHey5qLUEDPWazJ9QimqkeQK.jpg_430x430] 

dann habe ich versucht eine solche Datei mit Bildbetrachtungsgröße

int size = getImageView().getWidth(); 
      String cachedFile = file.getAbsolutePath() + "_" + size + "x" + size; // = file://.../qgKEIJC5EHey5qLUEDPWazJ9QimqkeQK.jpg_430x430 
      MemoryCacheUtils.removeFromCache(cachedFile, ImageLoader.getInstance().getMemoryCache()); 

aber es nicht funktioniert

Wie kann ich löschen Sie alle diese Dateien aus dem Cache zu löschen?

+0

hast du imageLoader.clearDiscCache() ;? – uguboz

+0

ich muss andere Bilder im Cache speichern (sie könnten sehr groß sein), und ich muss ihre kleinen Auflösungen im Cache haben, aber ich muss ein Bild entfernen und ersetzen es durch ein anderes mit demselben Namen, aber Bildlader nach dem Ersetzen von Shows altes Bild aus dem Speicher-Cache –

Antwort

0

schließlich fand ich eine Lösung: i für die lokale Datei falsche URL wurde mit, ich vergaß file:// in Code hinzuzufügen, verursachen wurde mein Bild-URL als file.getAbsolutePath() gespeichert und wurde einschließlich nicht file://. Auch fand ich, wie ich glatt Originalbild mit den geernteten ersetzen kann (in Situation, wenn Schicht Abdeckung Originalbild beschneiden und dann müssen sie verschwinden und zeigen bereits beschnittene Bild)

in Adapter

public void setImageLoader(final ImageView imageView, final MyImage myImage) { 
     final String path = "file://" + myImage.getAbsPathImage(); 
     final DisplayImageOptions options = new DisplayImageOptions.Builder() 
       .showImageForEmptyUri(R.drawable.ic_empty) 
       .showImageOnFail(R.drawable.ic_empty) 
       .resetViewBeforeLoading(false) //important! 
       .cacheInMemory(true) //important! 
       .cacheOnDisk(true) //important! 
       .imageScaleType(ImageScaleType.EXACTLY) 
       .bitmapConfig(Bitmap.Config.RGB_565) 
       .build(); 
     if (!myImage.isImageCropCacheUpdated()) { 
      List<String> memCache = MemoryCacheUtils.findCacheKeysForImageUri(path, ImageLoader.getInstance().getMemoryCache()); 
      boolean cacheFound = !memCache.isEmpty(); 
      if (!cacheFound) { 
       File discCache = DiskCacheUtils.findInCache(path, ImageLoader.getInstance().getDiskCache()); 
       if (discCache != null) { 
        cacheFound = discCache.exists(); 
       } 
      } 
      if (cacheFound) { 
       myImage.setIsImageCropCacheUpdated(true); 
       MemoryCacheUtils.removeFromCache(path, ImageLoader.getInstance().getMemoryCache()); 
       DiskCacheUtils.removeFromCache(path, ImageLoader.getInstance().getDiskCache()); 
      } 
     } 

     ImageLoader.getInstance().displayImage(path, imageView, options); 
} 

in Tätigkeit

final ImageView imageView = (ImageView) pager.findViewWithTag(Constants.TAGS.IMAGEVIEW_TAG 
         + pager.getCurrentItem()); //get image view from view pager 
       imageView.setImageBitmap(getCropImageView().getCroppedImage()); 
       imagePagerAdapter.setImageLoader(imageView, getCurrentImage()); //get cropped image from special crop image view and call setImageLoader from adapter 

i nicht notifyDataSetChanged() weil Bild blinkt in diesem Fall (weiß nicht warum) bin mit, danach i Animation ausgeblendet erfordern besondere Ansicht Bild zuschneiden und es sieht gut aus, ichbeschnittene Bild auch bin Einstellungvor Bildlader, weil es Bild für eine Weile laden kann, und Ausblenden Animation hat eine feste Zeitspanne, wenn ich das nicht tun wird - vielleicht ein wenig Zeit, wenn Crop-Layer bereits verschwunden und beschnitten Bild noch nicht geladen war, dies nicht gut

Verwandte Themen