2017-02-21 1 views
0

Ich füge ein Perference in meinem PerferenceFragment.Was ist falsch über löschen Fresco Diskcache und berechnen Größe()

deleteCache.setOnPreferenceClickListener(preference -> { 
     Fresco.getImagePipeline().clearDiskCaches(); 
     deleteCache.setSummary(String.format(getString(R.string.delete_format), getDiskSize())); 
     return true; 
    }); 

public static final long getDiskSize(){ 
    long bytes = Fresco.getImagePipelineFactory().getMainFileCache().getSize(); 
    return bytes==-1?0:bytes; 
} 

Ich denke, dass ich das Klicken perference dass getDiskSize() sollte 0 zurückgeben, aber ich sollte zweite oder mehrmals klicken dann die summary zeigen die diskcache 0 B. I ist nicht der Grund, über meine Lösung finden.

mehr Info:

  • Fresco 1,1
  • get cache size
  • Ich benutze Fresco.getImagePipeline().clearCaches(); es kann nicht slove Problem

ImagePipelineConfig

Set<RequestListener> requestListeners = new HashSet<>(); 
    requestListeners.add(new RequestLoggingListener()); 
    ImagePipelineConfig config = OkHttpImagePipelineConfigFactory 
      .newBuilder(this, RetrofitHelper.initClient()) 
      .setBitmapsConfig(Bitmap.Config.RGB_565) 
      .setRequestListeners(requestListeners) 
      .build(); 

I Klicken Sie auf die preference, die getDiskSize() nicht zum ersten Mal 0 zurückgeben.

Antwort

0

Ich lese den Code finden Sie das ist eine asynchrone Operation.

return Task.call(
     new Callable<Void>() { 
     @Override 
     public Void call() throws Exception { 
      mStagingArea.remove(key); 
      mFileCache.remove(key); 
      return null; 
     } 
     }, 
     mWriteExecutor); 
/** 
* Represents the result of an asynchronous operation. 
* 
* @param <TResult> 
*   The type of the result of the task. 
*/ 
public class Task<TResult>