2015-07-11 4 views
0

Я пытаюсь использовать amazon S3 Client для загрузки и скачивания файлов. Для кеширования я пытаюсь использовать Picasso прямо сейчас.Настройка ключа для picasso для S3 Amazon

Следует отметить несколько замечаний. 1- В S3 нет единственной ссылки для файла. Я должен произвольно генерировать URL-адрес для каждого изображения. Этот URL-адрес истечет, скорее всего, через 1 минуту, или я могу установить его истечение через 1 час.

В моей onCreateView моего адаптера я звоню что-то вроде этого

String url = getAmazonTempUrl() 

2- Каждое имя файла будет таким же, но они могут быть изменены на сервере. например, abc.png - это имя файла, и я могу быть 1mb сегодня и завтра там может быть еще одно изображение.

Теперь я хочу спросить, как пикассо справиться с ключом для такого сценария. URL-адрес меняется все время IN A Single scroll. Также имя такое же. Я не хочу, чтобы picasso проверял имя и не загружал новый обновленный файл.

+0

Я не хочу, чтобы picasso проверял имя и не загружал новый обновленный файл. - Не могли бы вы перефразировать это? Чего именно вы хотите достичь? –

ответ

0

Возможно, вы хотите сохранить кеш сгенерированных URL-адресов в HashMap, а если нет значения для определенного ключа, то сгенерируйте url с getAmazonTempUrl() и сохраните его в кеше.

Если вы установили время истечения срока действия URL-адреса в течение часа, вы можете записать время загрузки активности в переменную и проверить, было ли это больше часа. Если это так, очистите кеш.

Что вы можете сделать, это сделать обратный вызов с Пикассо в случае изображение не удается и воссоздать URL:

Picasso.with(this).load(imageUrl).into(imgaeView, new Callback() { 
       @Override 
       public void onSuccess() { 

       } 

       @Override 
       public void onError() { 
        //recreate the url here and store in cache 
       } 
      } 
    ); 

Edit:

Так что в вашем случае вы могли бы сохраняться выше кэш и загрузите его при следующем запуске приложения. Чтобы справиться с изменением изображения под тем же URL-адресом, вы можете попробовать сделать это грязным способом или чистым способом.

Чистый способ - изменить URL-адрес изображения, если сможете. Если это не вариант, вы можете проверить последнюю измененную дату изображения и добавить это как отметку времени на URL. например, http://www.sample.com/image.jpg?14869246263 - это отлично работает с кешем Пикассо, если URL-адрес точно такой же.

Грязный способ - загрузить кешированную версию, а затем сразу же после принудительной перезагрузки одного и того же изображения вокруг кеша (обычно это делается с помощью skipCache(), я считаю, но был устарел в пользу somethingCachePolicy).

+0

ya, но если я приду в приложение, скажем, через день или два, кешированные изображения будут потеряны. Я хочу, чтобы они были там как автономный кеш. если я могу кэшировать их определенным ключом, скажем, с их идентификатором. но picasso должен быть достаточно эффективным, чтобы обнаружить любое изменение сервера, скажем, в зависимости от его модифицированной даты? –

+0

Насколько я знаю, у Picasso нет возможности проверить, обновлен ли образ на сервере, он просто загружает кеш диска и останавливается там. (Необходима эта функция около полугода назад - ее там не было). И это функция .stableKey() предназначена только для кеша памяти. Будет немного обновлять ответ об этом. –

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