Picasso中是否可以从缓存内存中下载图片?

4
我正在为我的应用程序使用UniversalImageDownloader。在UIL中,我们可以从缓存中保存图像。
 File cachedImage = ImageLoader.getInstance().getDiscCache().get(imageUrl);
            if (cachedImage.exists())
            {// code for save 2 sd
                           }

在Picasso中是否可能实现这个功能?

你真的应该停止重复提问!! - Andro Selva
@AndroSelva 我能做什么。这个问题不清楚。这就是为什么我在另一个问题中给出了确切的细节。 - Asthme
我完全理解。但你还是错过了一个要点。你没有说清楚为什么确切地需要从缓存中获取图像!! 为什么? - Andro Selva
@AndroSelva 我在那里回答了 - Asthme
嗨,我下载了用于Picasso的jar包,但遇到了一些问题。如果您有示例,能否将其发送到我的邮箱?这样会有问题吗? - Andro Selva
显示剩余5条评论
4个回答

1

你可以这样做,使用OkHttp和Picasso:

public class APP extends Application{
  public static OkHttpDownloader okHttpDownloader;

  @Override
  public void onCreate() {
    super.onCreate();
    Picasso.Builder b = new Picasso.Builder(this);
    okHttpDownloader = new OkHttpDownloader(this);
    b.downloader(okHttpDownloader);
    Picasso.setSingletonInstance(b.build());
 }
}

然后从OkHttp本地缓存获取文件:
Downloader.Response res = APP.okHttpDownloader.load(Uri.parse(your image Url),0);
Log.i(TAG,"Get From DISK: " + res.isCached() );
storeImageFile(res.getInputStream());

为什么它必须扩展应用程序,您能详细说明storeImageFile方法吗?请包括代码。 - Lion789

1
在Picasso中有一个私有方法 -
Bitmap quickMemoryCacheCheck(String key) {
    Bitmap cached = cache.get(key);
    if (cached != null) {
      stats.dispatchCacheHit();
    } else {
      stats.dispatchCacheMiss();
    }
    return cached;
  }

根据您的需求修改源代码。

缓存缓存; StatsSnapshot统计信息; 我在我的活动中声明了这个变量,可以吗? - Asthme
quickMemoryCacheCheckPicasso.class 的私有方法。您需要从 GIT 拉取源代码并修改源代码。 - Mihir
好的,但是如何获取键值? - Asthme
在 Picasso 类中,我看到了 Stats 和 Cache 类来进行提取。但是如何获取键值? - Asthme

0

你可以在 ImageView 的 onSuccess() 回调中获取位图

Picasso.with(context).load(path).into(imageView, new Callback(){
    public void onSuccess() {
      Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
      //save bitmap to sdcard
   } 
   public void onError() {}
}

警告:保存的位图可能与原始位图不同。


0
以下代码片段将首先使 Picasso 从缓存加载图像,如果失败,则下载并在 imageView 中显示图像。
您可以使用调试内存性能。

Picasso.with(appContext).setIndicatorsEnabled(true);

  • 绿色(内存,最佳性能)
  • 蓝色(磁盘,良好性能)
  • 红色(网络,最差性能)。

    //调试内存性能 https://futurestud.io/tutorials/picasso-cache-indicators-logging-stats
    //TODO 部署时删除
    Picasso.with(appContext).setIndicatorsEnabled(true);
    
    //尝试从缓存加载图像
    Picasso.with(appContext)
            .load(imageUrl)
            .networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.ic_launcher)
            .placeholder(R.drawable.ic_launcher)
            .resize(100, 100)
            .error(R.drawable.ic_drawer)
            .into(markerImageView, new Callback() {
                @Override
                public void onSuccess() {
    
                }
    
                @Override
                public void onError() {
    
                    // 如果缓存失败,请尝试在线加载
                    Picasso.with(appContext)
                            .load(imageUrl)
                            .placeholder(R.drawable.ic_launcher)
                            .resize(100, 100)
                            .error(R.drawable.ic_drawer)
                            .into(markerImageView);
                }
            });
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接