问题 如何使用Android的CacheManager?


我目前正在开发一个使用http请求获取图像的Android应用程序。如果我可以缓存这些图像以改善性能和带宽使用,那将会非常膨胀。

我在Android参考中遇到过CacheManager类,但我真的不知道如何使用它,或者它真正做到了什么。

我已经完成了这个例子,但我需要一些帮助来理解它:

/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java

此外,参考说明:

“网络请求被提供给该组件,如果它们无法通过缓存解析,则HTTP标头会根据情况附加到内容重新验证请求中。”

我不确定这意味着什么或它对我有什么用处,因为CacheManager的getCacheFile只接受String URL和包含标题的Map。不确定所提到的附件是什么意思。

一个解释或一个简单的代码示例真的会做我的一天。谢谢!

更新

这就是我现在所拥有的。我显然做错了,只是不知道在哪里。

public static Bitmap getRemoteImage(String imageUrl){
        URL aURL = null;
        URLConnection conn = null;
        位图bmp = null;

        CacheResult cache_result = CacheManager.getCacheFile(imageUrl,new HashMap());

        if(cache_result == null){
            尝试{
                aURL =新网址(imageUrl);
                conn = aURL.openConnection();
                conn.connect();
                InputStream = conn.getInputStream();

                cache_result = new CacheManager.CacheResult();
                copyStream(is,cache_result.getOutputStream());
                CacheManager.saveCacheFile(imageUrl,cache_result);
            } catch(例外e){
                return null;
            }
        }

        bmp = BitmapFactory.decodeStream(cache_result.getInputStream());
        返回bmp;
    }

12361
2018-01-13 20:05


起源

你用这段代码得到了什么错误? - Janusz
E / AndroidRuntime(3097):致命异常:主E / AndroidRuntime(3097):java.lang.NullPointerException E / AndroidRuntime(3097):在android.webkit.CacheManager.saveCacheFile(CacheManager.java:459)是我得到的试图保存到缓存,如果可能的话,我想知道如何增加赏金。 E / AndroidRuntime(3097):在android.webkit.CacheManager.saveCacheFile(CacheManager.java:453) - HaMMeReD


答案:


我不认为CacheManger可以在WebView之外使用,如本错误报告中所述 http://code.google.com/p/android/issues/detail?id=7222


10
2018-04-09 21:22



那是对的..我有同样的问题,经过两天的挣扎,我读了那个bug报告:) - andrea.rinaldi
如果您正在寻找Android上的HTTP请求缓存,那么一个选项是齐射: stackoverflow.com/questions/tagged/android-volley - Matthew Buckett


我前一段时间也遇到过这个问题。缓存管理器仅用于webview,除此之外并不是真正有用。对于我的应用程序,我需要缓存xml响应和图像,所以我最终编写自己的缓存管理器来完成它。没有什么太可怕,但肯定不像使用内置的那么容易。

如果您对具体细节有任何疑问,请在我的帖子中添加评论,我会经常查看。


1
2017-12-24 21:33



你能提供更多关于实施的细节吗? - sabbour
@sabbour你想知道什么?基本上我打开了一个http流并将其写入文件。当我的应用程序访问该文件时,它检查了文件的年龄,如果它太旧则删除它,以便我的应用程序知道下载新副本。 - smith324