Android + Picasso:如何正确显示来自 URL 的图像形成缓存

Android + Picasso: How to show images from URL properly form cache

我现在正在开发 Android 应用程序,我需要在数据库中为每个对象存储图像 Url,然后从网络加载此图像(如果连接打开)或从缓存中获取它(如果不)。 Picasso 似乎是 Android 中处理图像的最佳库,所以我开始使用它。但我不知道如何正确使用它来处理我的情况。甚至更多 - 图像奇怪地在第一次从 API 获取后立即加载到视图中,但如果用户再次启动应用程序,我们只能看到占位符(即使有互联网连接)。有人可以提出解决方案或至少任何一种最佳方法的想法吗?

我在 Adapter 中的代码(在 ShowActivity 中也一样):

String img_url = item.getImage(); // img_url is valid image url
Picasso.with(mContext).load(img_url).placeholder(R.drawable.plchldr).fit().centerCrop().into(holder.image);

我一开始也尝试使用 Picasso,发现他们的缓存系统很糟糕。 它会缓存我下载的一些图像,但不会缓存其他图像,因此会留下很多带有占位符的图像。

我建议您尝试 Universal-Image-Loader (https://github.com/nostra13/Android-Universal-Image-Loader)。我目前正在使用它来缓存我的应用程序中的所有图像,并且它可以完美运行(大约 200 张图像 atm)。

终于找到了问题 - API 正在返回有效图像 url 但实际上它(图像)托管在 S3 云上并且在用户再次加载应用程序之前它会过期。因此,在这种情况下实际保存过期图像 URL 是无用的。我不确定我将在这里做什么(似乎这里唯一的方法是困难的——将图像存储在 SD 上作为位图)。但我只是想告诉那些会遇到类似问题的人。