如何使用Picasso库下载和缓存位图

我使用以下方法

Bitmap bitmap = Picasso.with(ListofCardsActivity.this) .load(overLayUrl).get(); 

下载并从url获取图像。

这种方法是否每次都从url下载图像,即使已经下载了?

我想要的是,一旦下载了图像,那么从下一次起,我应该从缓存中获取图像,无需下载。

如果我们有像上述要求的方法。 请告诉我

这种方法是否每次都从url下载图像,即使已经下载了?

如果它被缓存则不行。

with()返回的Picasso实例已预先配置为具有内存缓存和磁盘缓存。

根据您下载的数量,您可能会用尽缓存空间。 我希望Picasso使用像ETagIf-Modified-Since这样的东西来重新下载图像,如果图像在服务器上发生了变化,虽然我没有检查他们的代码以查看它们是否存在,因为这种行为没有记录。

这种方法是否每次都从url下载图像,即使已经下载了? 如果它被缓存则不行。

根据文档和源代码,Picasso在使用同步get()方法时不会缓存任何内容。

所以这是我的解决方案,用于同步加载图像并使用Picasso缓存它:

  File fileImage = new File("/path/to/your/image"); final Bitmap[] bmpRes = new Bitmap[1]; final Semaphore semaphore = new Semaphore(0); Picasso.with(this).load(fileImage).priority(Picasso.Priority.HIGH).into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { bmpRes[0] = bitmap; semaphore.release(); } @Override public void onBitmapFailed(Drawable errorDrawable) { semaphore.release(); } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }); try { semaphore.acquire(); } catch (InterruptedException e) { e.printStackTrace(); } if(bmpRes[0] != null) { Bitmap bmp = bmpRes[0]; //TODO: Whatever you want with the bitmap } else { //TODO: Failed to load the image }