2013-08-27 91 views
4

我使用UniversalImageDownloader作爲我的app.in UIL,我們可以保存高速緩存中的圖像。是否可以從picasso中的緩存中下載圖像?

File cachedImage = ImageLoader.getInstance().getDiscCache().get(imageUrl); 
      if (cachedImage.exists()) 
      {// code for save 2 sd 
          } 

畢加索可能嗎?

+0

你真的應該停止複製您的問題! –

+0

@AndroSelva我能做些什麼。這個問題不清楚。只有我在另一個問題中給出了確切的細節。 – Asthme

+0

我完全明白這一點。但是你仍然缺少一點。你不明白爲什麼你確實需要從緩存中獲取圖像!爲什麼? –

回答

1

有畢加索的私有方法 -

Bitmap quickMemoryCacheCheck(String key) { 
    Bitmap cached = cache.get(key); 
    if (cached != null) { 
     stats.dispatchCacheHit(); 
    } else { 
     stats.dispatchCacheMiss(); 
    } 
    return cached; 
    } 

根據您的需要修改源。

+0

我會盡力告訴.. – Asthme

+0

緩存緩存; StatsSnapshot統計信息;我在我的活動中聲明瞭這個變量可以嗎? – Asthme

+0

'quickMemoryCacheCheck'是'Picasso.class'的私有方法。你必須從'GIT'中提取源代碼並修改源代碼。 – Mihir

0

您可以從ImangeView的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() {} 
} 

警告得到位圖:保存位圖可能是原始位不同。

1

你可以這樣做,使用OkHttp &畢加索:

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()); 
+0

爲什麼它必須擴展應用程序,並且可以擴展存儲方法storeImageFile,包括代碼? – Lion789

0

下面的代碼片段將首先從緩存中讓畢加索負荷的形象,如果失敗,則下載並顯示圖像imageView

您可以使用

調試內存性能

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

  • 綠色(內存,性能最好)
  • 藍色(磁盤,性能良好)
  • 紅(網絡,表現最差)。

     //Debugging memory performance https://futurestud.io/tutorials/picasso-cache-indicators-logging-stats 
        //TODO remove on deployment 
        Picasso.with(appContext).setIndicatorsEnabled(true); 
    
        //Try to load image from cache 
        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() { 
    
            // Try online if cache failed 
            Picasso.with(appContext) 
              .load(imageUrl) 
              .placeholder(R.drawable.ic_launcher) 
              .resize(100, 100) 
              .error(R.drawable.ic_drawer) 
              .into(markerImageView); 
           } 
          }); 
    
相關問題