使用毕加索在磁盘上加载图像

时间:2015-05-04 07:46:01

标签: android caching android-image picasso

我正在使用毕加索。

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

这是我想要做的事情我想要将Image缓存在外部SD卡或手机内存上,但由于内存限制,不希望将图像缓存在堆内存上。因此,如果第一次加载图像,它应该缓存在磁盘上,当下次请求相同的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);

1 个答案:

答案 0 :(得分:1)

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