从下载缓存中删除图像

时间:2014-08-26 12:01:23

标签: xamarin.ios xamarin mvvmcross

我在iOS上使用MvvmCross 3.1.1和MvxImageView

MvxImageView从Urls加载图片并缓存这些图片。但是,我想更新这些图像,但它会继续加载缓存的图像。

即。使用像www.lalalalalala.dk/bjar.png这样的网址时。然后,此图像将从其他位置更新。但是Url保持不变。似乎MvxImageView保留了缓存的图像,并且不加载新的图像。

是否可以删除缓存的图片并强制它从Url重新加载图片?

我试过看看

var service = Mvx.Resolve<IMvxImageHelper<UIImage>>();

但我找不到任何有用的东西。


UPDATE 我必须说这让我有点头疼。我找到了如何从文件系统中删除图像,但有时图像存储在内存中,因此无法删除。有任何建议如何解决这种情况?

1 个答案:

答案 0 :(得分:0)

我最终在mvvmcross中扩展(复制/粘贴)图像缓存 - MvxImageCache和IMvxImageCache,并添加了这两种方法。

    public void RemoveUrlFromCache(string url)
    {
        this.RunSyncOrAsyncWithLock(
            () =>
                {
                    Entry entry;
                    if (this._entriesByHttpUrl.TryGetValue(url, out entry))
                    {
                        this._entriesByHttpUrl.Remove(url);

                    }
                this._fileDownloadCache.RequestLocalFilePath(url, (stream) => this.DeleteFile(url, stream),
                    (exception) => this.ProcessError(url, exception));

                });
    }

    private void DeleteFile(string url, string filepath)
    {
        if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(filepath))
        {
            var fileService = Mvx.Resolve<IMvxFileStore>();
            fileService.DeleteFile(filepath);
        }
    }

使用此功能,我可以在droid的子类Imageview中调用以下内容(触摸类似)。

var cache = Mvx.Resolve<IMvxImageCache<Bitmap>>() as ImageCache<Bitmap>;;
            if (cache != null)
            {
                cache.RemoveUrlFromCache(_imageUrl);   
            }

我会做一个拉取请求,希望他们会接受或做类似的事情