gpt4 book ai didi

android - 清除缓存 (Retrofit/okHttp)

转载 作者:行者123 更新时间:2023-11-30 00:59:11 25 4
gpt4 key购买 nike

我需要一个函数来清除我的应用程序的完整缓存。我将 Retrofit 与 okHttp 一起用于我的默认请求,并将 Picasso 用于图像加载。有没有可能?

我知道我可以为特定请求执行 CacheControl.FORCE_NETWORK,但之后我需要清除整个缓存。

有什么想法吗?

最佳答案

这是我为 picasso 制作的自定义单例。您可以使用清除缓存方法来清除 picasso 缓存。我真的不能帮助你进行改造,因为我没有使用过它......只要在这个类中使用你喜欢的值......

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

然后清除缓存为:

 PicassoSingleton.clearLRUCache();

关于android - 清除缓存 (Retrofit/okHttp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39700849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com