2016-09-26 23 views
-1

私のアプリケーションのキャッシュをクリアする機能が必要です。私は、イメージロードのための私のdefaut RequestsとPicassoにokHttpでRetrofitを使用しています。可能性はありますか?キャッシュをクリアする(Retrofit/okHttp)

私は具体的なリクエストに対してCacheControl.FORCE_NETWORKを行うことができますが、後でキャッシュ全体をクリアする必要があることは知っています。

すべてのアイデア?

+0

申し訳ありませんが、後付けのお手伝いをします – Kushan

答えて

1

私はピカソのために作ったカスタムシングルトンです。クリアキャッシュ方式を使用して、ピカソキャッシュをクリアすることができます。私はあなたがこのクラス内喜ばとして...ちょうど値を使用することを使用していないと私は本当に、次のように

import android.content.Context; 
import android.util.Log; 

import com.jakewharton.picasso.OkHttp3Downloader; 
import com.squareup.picasso.LruCache; 
import com.squareup.picasso.Picasso; 

import java.io.File; 
import java.io.IOException; 
import java.util.concurrent.TimeUnit; 

import okhttp3.Cache; 
import okhttp3.OkHttpClient; 

//Singleton Class for Picasso Downloading, Caching and Displaying Images Library 
public class PicassoSingleton { 

private static Picasso mInstance; 
private static long mDiskCacheSize = 50*1024*1024; //Disk Cache 50mb 
private static int mMemoryCacheSize = 50*1024*1024; //Memory Cache 50mb, not currently using this. Using default implementation 
private static OkHttpClient mOkHttpClient; //OK Http Client for downloading 
private static OkHttp3Downloader okHttp3Downloader; 
private static Cache diskCache; 
private static LruCache lruCache;//not using it currently 


public static synchronized Picasso getSharedInstance(Context context) 
{ 
    if(mInstance == null) { 
     if (context != null) { 
      //Create disk cache folder if does not exist 
      File cache = new File(context.getApplicationContext().getCacheDir(), "picasso_cache"); 
      if (!cache.exists()) { 
       cache.mkdirs(); 
      } 

      diskCache = new Cache(cache, mDiskCacheSize); 
      //lruCache = new LruCache(mMemoryCacheSize);//not going to be using it, using default memory cache currently 
      lruCache = new LruCache(context); // This is the default lrucache for picasso-> calculates and sets memory cache by itself 

      //Create OK Http Client with retry enabled, timeout and disk cache 
      mOkHttpClient = new OkHttpClient.Builder().cache(diskCache).connectTimeout(6000, TimeUnit.SECONDS).build(); //100 min cache timeout 



      //For better performence in Memory use set memoryCache(Cache.NONE) in this builder (If needed) 
      mInstance = new Picasso.Builder(context).memoryCache(lruCache).downloader(new OkHttp3Downloader(mOkHttpClient)).indicatorsEnabled(true).build(); 

     } 
    } 
    return mInstance; 
} 

public static void deletePicassoInstance() 
{ 
    mInstance = null; 
} 

public static void clearLRUCache() 
{ 
    if(lruCache!=null) { 
     lruCache.clear(); 
     Log.d("FragmentCreate","clearing LRU cache"); 
    } 

    lruCache = null; 

} 

public static void clearDiskCache(){ 
    try { 
     if(diskCache!=null) { 
      diskCache.evictAll(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    diskCache = null; 

} 
} 

あなたがそれを使用することができます...後付けのお手伝いをすることはできません。

Picasso customPicasso= PicassoSingleton.getSharedInstance(youContext); 
Picasso.setSingletonInstance(customPicasso); 

その後、キャッシュをクリアする:カスタムディスクとLRUキャッシュサイズを設定することができるようにそこにかかわらず、ピカソのキャッシュをクリア..も行わ取り決めをチェックアウト:)できれば

PicassoSingleton.clearLRUCache(); 
関連する問題