Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何在Android中使用图像缓存?_Java_Android_Caching - Fatal编程技术网

Java 我如何在Android中使用图像缓存?

Java 我如何在Android中使用图像缓存?,java,android,caching,Java,Android,Caching,我在android中缓存图像时遇到了一些问题。我正在使用异步任务从URL下载图像。在下载之前,我检查缓存中是否已经包含一个以URL为键的可绘制文件。如果是,将从缓存中获取可绘制文件 下载由ListFragment的自定义ArrayAdapter触发,或在另一个片段的onCreateView()中触发 我的问题是:第一次下载可以正常工作。但是如果我滚动ListFragment,就会加载错误的图像。如果我重新加载列表或片段,图像将从缓存中获取,ImageView将为空。如果我不使用缓存,图像将正确显

我在android中缓存图像时遇到了一些问题。我正在使用异步任务从URL下载图像。在下载之前,我检查缓存中是否已经包含一个以URL为键的可绘制文件。如果是,将从缓存中获取可绘制文件

下载由ListFragment的自定义ArrayAdapter触发,或在另一个片段的onCreateView()中触发

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

下面是我的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;
    }
}

谢谢您的帮助。

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



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

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



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

使用421推荐的库之一,无需重新发明轮子;)使用421推荐的库之一,无需重新发明轮子;)
logger.debug("Checking cache");
Drawable d = CacheHandler.getInstance().getFromCache((String) params[0]);