gpt4 book ai didi

java - 如何在Android中制作图片缓存?

转载 作者:行者123 更新时间:2023-12-01 23:58:07 24 4
gpt4 key购买 nike

我在android中缓存图片时遇到了一些麻烦。我正在使用AsyncTask从URL下载图像。下载之前,我检查缓存中是否已经包含一个以URL为键的Drawable。如果是,则Drawable将从缓存中获取。

下载是由用于ListFragment的自定义ArrayAdapter或另一个Fragment的onCreateView()中触发的。

我的问题如下:第一次下载正常。但是,如果我滚动ListFragment,则会加载错误的图像。如果我重新加载列表或片段,则图像将从缓存中获取,ImageViews将为空。如果我不使用缓存,则图像将正确显示。

这是我的CacheHandler的代码:

import android.graphics.drawable.Drawable;
import android.util.LruCache;

public class CacheHandler {
private static CacheHandler instance;
private LruCache<String, Drawable> cache;
private final Logger logger = new Logger(CacheHandler.class);

private CacheHandler() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
cache = new LruCache<String, Drawable>(cacheSize);
}

public static CacheHandler getInstance() {
if (instance == null)
instance = new CacheHandler();
return instance;
}

public void addToCache(String key, Drawable pic) {
if (getFromCache(key) == null) {
cache.put(key, pic);
logger.debug("Added drawable to cache with key " + key);
} else
logger.debug("Drawable with key " + key + " already exists");
}

public Drawable getFromCache(String key) {
logger.debug("Getting image for " + key);
Drawable d = cache.get(key);
logger.debug("Image is " + d);
return d;
}
}


这里是AsyncTask中的调用:

logger.debug("Checking cache");
Drawable d = CacheHandler.getInstance().getFromCache((String) params[0]);


谢谢您的帮助。

最佳答案

解决方案有很多方法。
您可以点击下面的链接
Link 1

Link 2
Link 3

希望我的回答对您有所帮助。 :)

关于java - 如何在Android中制作图片缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292887/

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