2013-08-27 2 views
4

Я использовал UniversalImageDownloader для своего приложения. В UIL мы можем сохранять изображения из кэш-памяти.Можно ли загружать изображения из кэш-памяти в пикассо?

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 stats; Я объявил, что эта переменная в моей деятельности - это нормально? – 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

Ниже фрагмент кода будет первым сделать Picasso загрузить изображение из кэша, если не удалось, загрузите и покажите изображение в 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); 
           } 
          }); 
    
Смежные вопросы