2016-02-29 3 views
0

У меня есть приложение для Android, у которого есть изображение профиля. Пользователь может редактировать изображение своего профиля. Я использую Picasso для загрузки изображений, но каждый раз, когда я загружаю изображение профиля, Picasso загружает старое изображение.Profile Image Uploader and Load it with Picasso

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

Первый вопрос: следует ли изменять изображение профиля изображения при каждом изменении профиля пользователя?

Второй вопрос: Когда пользователь изменит его/ее изображение профиля я аннулирование Picasso загрузить новое изображение, используя этот код:

picassoInstance.load(url) 
    .networkPolicy(NetworkPolicy.NO_CACHE) 
    .transform(new CircleTransform()) 
    .placeholder(dr) 
    .into(imageView); 

Но Пикассо показал мне старую. И еще одна вещь: Я загружаю URL-адрес изображения в изображениеView без вызова метода networkPolicy. Как мне решить эту проблему?

ответ

0

Так давайте просто обсудим один за другим:

Должен ли я изменить профиль URL изображения каждый раз, когда пользователь изменит профиль изображение?

Нет. Вы можете подумать о других путях. В моем случае я загружаю изображение каждый раз, когда URL изменяется с определенным именем пользователя (как мы рассматриваем изображение профиля). Поэтому, когда я загрузил изображение с помощью Picasso, я передал путь к файлу вместо URL-адреса, чтобы он не получал URL-адрес каждый раз. Пикассо этого не делает. Он поддерживает кеш. Если файл не существует, просто поставьте местозаполнитель.

Когда пользователь изменит его/ее изображение профиля я аннулирует Пикассо загрузить новое изображение, используя этот код:

Я не вижу код ТЕРЯЕТСЯ здесь в вашем коде. Я хотел бы обратиться к этому link, чтобы узнать, как они решили проблему с кешем.

Я загружаю URL-адрес изображения в изображениеView без вызова networkPolicy method сперва.

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

И еще одно предложение - использовать в этих случаях Glide. Это почти то же самое, что и Пикассо, но лично мне нравится использовать Glide вместо Picasso.

Надеюсь, что это поможет.

0

Использование Скольжение вместо Пикассо, потому что Glide рекомендованные Google http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

Предотвращение кэширования в Glide

Glide.with(DemoActivity.this) 
    .load(Uri.parse("file://" + imagePath)) 
    .diskCacheStrategy(DiskCacheStrategy.NONE) 
    .skipMemoryCache(true) 
    .into(mImage); 
1

Каждое изображение имеет другое имя, когда новое изображение загруженное вы должны обновить URL изображения

Например. текущий URL:https://photographylife.com/nikon-d810-high-resolution-image-samples

где имя Изображение:nikon-d810-high-resolution-image-samples

и после того, как загрузил изображение, название будет отличаться , например: image-sample

так что вам нужно обновления, URL изображения :https://photographylife.com/image-sampleс новым именем

попробуйте это, я говорю вам, что вы делаете ту же надежду, это поможет вам!

0

Добавить этот класс в пакет com.squareup.picasso.

Поскольку кэш имеет видимость пакета, этот класс util может очистить кэш для вас. Вы просто должны назвать:

PicassoTools.clearCache(Picasso.with(context)); 
+0

Я использую Picasso 2.5.2, и я не могу найти поле кэша – Hojjat

0

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

picassoInstance.load(url) 
.networkPolicy(NetworkPolicy.NO_CACHE) 
.memoryPolicy(MemoryPolicy.NO_CACHE) 
.transform(new CircleTransform()) 
.placeholder(dr) 
.into(imageView); 

Я использую эту ссылку: picasso-influencing-image-caching

Спасибо всем