用Picasso安卓磁盘下载图像

时间:2014-03-20 12:35:32

标签: android image picasso

我使用Picasso库在列表视图中下载和显示图像,我使用以下代码:

Picasso.with(mContext).load(listItem.getMainPhoto()).into(holder.image);

其中listItem.getMainPhoto()是网址。

但是我需要在服务中下载一些图像,通常当应用程序不工作时,用户可以在离线时看到它们,例如我需要下载将在listview中使用的10个图像后面。

所以我有两个问题:

  1. 如何使用Picasso下载图像并将其存储在永久性存储器中,以便我使用时 Picasso.with(mContext).load(listItem.getMainPhoto())代入(holder.image);
  2. lib会首先尝试在本地获取图像,如果没有,它会从网上获取它吗?

    2.如果lib已将图像下载到永久内存中,我该如何清理永久内存?

    我猜这个功能在Picasso开箱即用,因为我已经注意到lib有时会显示现金图像。感谢

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但也许有人会觉得这很有用。

您可以使用目标下载picasso的图像:

    Picasso.with(mContext)
    .load(listItem.getMainPhoto())
    .into(target);

private Target target = new Target() {
    @Override
    public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
        new Thread(new Runnable() {
            @Override
            public void run() {               

                File file = new File(Environment.getExternalStorageDirectory().getPath() +"/imagename.jpg");
                try
                {
                    file.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(CompressFormat.JPEG, 75, ostream);
                    ostream.close();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }

            }
        }).start();
    }
    @Override
    public void onBitmapFailed(Drawable errorDrawable) {
    }

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {
        if (placeHolderDrawable != null) {
        }
    }
};

要清理缓存,您可以将此类添加到picasso包中:

package com.squareup.picasso;

public class PicassoTools {

    public static void clearCache (Picasso p) {
        p.cache.clear();
    }
}