我想使用Picasso预取图像并在打开应用程序时将它们全部保存到磁盘上(动态上没有延迟加载)。为了确保缓存足够大,我在我的应用程序onCreate
ContextWrapper cw = new ContextWrapper(getApplicationContext());
// path to /data/data/yourapp/app_data/imageDir
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
OkHttpClient client = new OkHttpClient.Builder()
.cache(new Cache(directory, Integer.MAX_VALUE))
.build();
OkHttp3Downloader okHttp3Downloader = new OkHttp3Downloader(client);
Picasso.Builder builder = new Picasso.Builder(this);
builder.downloader(okHttp3Downloader);
Picasso built = builder.build();
built.setIndicatorsEnabled(false);
built.setLoggingEnabled(false);
Picasso.setSingletonInstance(built);
所以在这里我将缓存大小设置为Integer.MAX_VALUE
,这应该足够大;)
我使用与此行类似的代码来预取图片:Picasso.with(context).load(url).fetch();
。
现在当我杀死我的互联网和移动数据时,即使我的代码正在获取项目,也不会加载任何图像。有什么想法吗?
答案 0 :(得分:0)
也许这个问题正在失去状态。您是否尝试扩展Application类(如this)并将Picasso实例保留在此处?
在我需要获取大量图像的类似情况下,我将它们保存到内部存储器(不仅仅是在某些缓存中) - 以防止重新加载,并将文件保存到SQLite中,然后使用Picasso使用这样的URI。 (别忘了检查用户是否删除了任何内容)。
答案 1 :(得分:0)
最后,我创建了自己的图像管理器,用于下载和存储图像(仍然使用毕加索下载它们)。
答案 2 :(得分:0)
这是我的方法:
在应用程序的onCreate方法中执行
:Picasso picasso = new Picasso.Builder(this)
.downloader(new OkHttp3Downloader(this,Integer.MAX_VALUE))
.build();
picasso.setIndicatorsEnabled(BuildConfig.DEBUG);
picasso.setLoggingEnabled(BuildConfig.DEBUG);
Picasso.setSingletonInstance(picasso);
然后在任何要加载图像的地方,为每个图像的url调用它:
Picasso.with(context).load(url).fetch();
来自文档:
fetch()
在没有ImageView或Target的情况下异步完成请求。当您想用图像预热缓存时,这很有用。
您甚至可以pass in callback检查可能的错误