在磁盘上使用 picasso 加载图像

Image loading using picasso on disk

我正在使用 Picasso。

我想在磁盘上缓存图像,我正在使用 okhttpdownloader。

这是我正在尝试做的事情我希望将图像缓存在外部 SD 卡或 phone 内存中,但由于内存限制不想将图像缓存在堆内存中。因此,如果图像是第一次加载,它应该缓存在磁盘上,当下次请求相同时 url 它应该首先查看磁盘是否被缓存。

我无法实现以下是我的代码。

public class PicassoCache {

/**
 * Static Picasso Instance
 */
private static Picasso picassoInstance = null;
private File cacheDir;

/**
 * PicassoCache Constructor
 *
 * @param context application Context
 */
private PicassoCache (Context context) {
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        cacheDir = context.getExternalCacheDir();
    else
        cacheDir = context.getCacheDir();
    Downloader downloader   = new OkHttpDownloader(cacheDir, Integer.MAX_VALUE);
    Picasso.Builder builder = new Picasso.Builder(context);
    builder.downloader(downloader);

    picassoInstance = builder.build();
}

/**
 * Get Singleton Picasso Instance
 *
 * @param context application Context
 * @return Picasso instance
 */
public static Picasso getPicassoInstance (Context context) {

    if (picassoInstance == null) {

        new PicassoCache(context);
        return picassoInstance;
    }

    return picassoInstance;
}

}

在适配器内部我有以下代码

 PicassoCache.getPicassoInstance(context)
                .load(item.imageUrl)
                .memoryPolicy(MemoryPolicy.NO_CACHE)
                .networkPolicy(NetworkPolicy.NO_CACHE)
                .into(holder.itemImage);

尝试删除 .networkPolicy(NetworkPolicy.NO_CACHE) 并将 NO_STORE 添加到 memoryPolicy .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)