2016-08-24 15 views
1

Я реализовал библиотеку Picasso для загрузки изображений. Image Caching работает отлично, пока мы не уничтожим приложение. Если приложение убито, Пикассо снова загружает изображения, не кэширует. Это известная ошибка в этой библиотеке, поскольку я читал ее в разных блогах, где-то я читал, что обновление библиотеки Picasso разрешает эту проблему, я сделал то же самое, но она все еще остается. Прямо сейчас я использую Picasso Version2.5.2. Если у кого-нибудь есть хороший опыт работы с Пикассо, пожалуйста, дайте мне знать несколько вещей.Killing application Picasso перезагружает изображения повсюду в приложении в android

Что является самой обновленной версией Пикассо? Этот вопрос остается в Пикассо в последней версии? есть ли это сложное решение? Какую библиотеку мне нужно использовать для преодоления этой проблемы?

Заранее спасибо.

+0

мое предложение - использовать [glide] (https://github.com/bumptech/glide) – mayosk

ответ

0

Это, как я реализовал Пикассо, чтобы заставить его искать записи кэша первого до загрузки изображений онлайн again..Due к сведению, что библиотека имеет кэш limit..read 65MB, что где-то в документации

Picasso.with(context) 
        .load(Link) 
        .placeholder(R.drawable.grad) 
        .error(R.drawable.grad) 
        .networkPolicy(NetworkPolicy.OFFLINE) 
        .fit() 
        .centerCrop() 
        .into(image, new Callback() { 
         @Override 
         public void onSuccess() { 
          //successfully loads from CACHE 
          image.setClickable(true); 
          .............. 
         } 

         @Override 
         public void onError() { 
          // fetch online because cache is not there 
          Picasso.with(context) 
            .load(Link) 
            .fetch(new Callback() { 
             @Override 
             public void onSuccess() { 
              Picasso.with(context) 
                .load(Link) 
                .fit() 
                .centerCrop() 
                .into(image, new com.squareup.picasso.Callback() { 
                 @Override 
                 public void onSuccess() { 

                 //success.. 
                 } 

                 @Override 
                 public void onError() { 
                  Toast.makeText(context, "No Image Found. Try again later", Toast.LENGTH_SHORT).show(); 
                  image.setClickable(false); 

                 } 
                }); 
             } 

             @Override 
             public void onError() { 
              //NO IMAGE offline or online 
              Toast.makeText(context, "No Image Found. Try again later", Toast.LENGTH_SHORT).show(); 
              image.setClickable(false); 

             } 
            }); 
         } 
        }); 
1

Для загрузки изображений после Killed приложения, вы должны следовать инструкциям:

  1. сервер должен возвращать изображение с заголовком Cache-Control
    т.е. Cache-Control:public, max-age=604800
    Дополнительная информация: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
  2. Вы должны создать свой собственный экземпляр Picasso:
    Cache cache = new Cache(context.getCacheDir(), 30000000); OkHttpClient client = new OkHttpClient.Builder().cache(cache).build(); OkHttp3Downloader downloader = new OkHttp3Downloader(client); Picasso picasso = new Picasso.Builder(appContext).downloader(downloader).build();
  3. Загрузить изображение: picasso.load(url).into(imageView);

Explaination:

Пикассо не имеет дискового кэша. Он делегирует любой HTTP-клиент, который вы используете для этой функции (полагаясь на семантику кеша HTTP для управления кешем). Из-за этого поведение, которое вы ищете, предоставляется бесплатно

 Смежные вопросы

  • Нет связанных вопросов^_^