Я пытался использовать библиотеку Fresco на Facebook.
Из документации я понял, что кэширование изображений работает из коробки с ImagePipeline
s, когда мы используем SimpleDraweeView
. Я в значительной степени вижу, что все работает отлично, только с небольшой заминкой: хотя Fresco извлекает изображения из моего URI, изображения в DiskCache и других кешах не заменяются им.
Я уверен, что мой код извлекает изображения, потому что мои изображения отображаются при первом запуске приложения после очистки кеша, и я реализовал RequestListener
и ControllerListener
, которые оба оказались успешными.
Вот моя текущая установка:
// Setting the collaborator image.
GenericDraweeHierarchy collaboratorPicHierarchy =
genericDraweeHierarchyBuilder
.setPlaceholderImage(
getInitialsAsDrawable(
collaborator.getUser().getInitials()
)
)
.setRoundingParams(new RoundingParams()
.setRoundAsCircle(true)
)
.build();
holder.collaborator.setHierarchy(collaboratorPicHierarchy);
holder.collaborator.setImageURI(
Uri.parse(AltEngine.formURL("user/getProfilePic/") +
accessToken + "/" +
collaborator.getUser().getUuid()
)
);
Весь этот код находится внутри адаптера, и в конструкторе адаптера я инициализировал Fresco.
imagePipelineConfig = ImagePipelineConfig.newBuilder(this.context)
.build();
Fresco.initialize(this.context, imagePipelineConfig);
После долгих поисков в StackOverflow я обнаружил, что можно использовать следующий фрагмент.
Fresco.getImagePipelineFactory().getMainDiskStorageCache().remove(new SimpleCacheKey(uri.toString()));
Fresco.getImagePipelineFactory().getSmallImageDiskStorageCache().remove(new SimpleCacheKey(uri.toString()));
Я попробовал это в экземпляре onRequestSuccess
из ImageRequest
, который я связал с SimpleDraweeView
, но это привело к тому, что заполнитель отображался каждый раз, когда я обновляю ListView
, что плохо.
Следующее решение, которое я нашел, было здесь Android - Как получить файл изображения из кэша диска Fresco? что предполагает, что может быть необходимо реализовать мой собственный DiskCacheConfig
для Fresco, чтобы сделать мой DiskCache недействительным, поэтому я попытался настроить свой DiskCache с помощью кода, который я нашел в вопросе SO.
DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder().setBaseDirectoryPath(this.context.getCacheDir())
.setBaseDirectoryName("v1")
.setMaxCacheSize(100 * ByteConstants.MB)
.setMaxCacheSizeOnLowDiskSpace(10 * ByteConstants.MB)
.setMaxCacheSizeOnVeryLowDiskSpace(5 * ByteConstants.MB)
.setVersion(1)
.build();
imagePipelineConfig = ImagePipelineConfig.newBuilder(this.context)
.setMainDiskCacheConfig(diskCacheConfig)
.build();
Fresco.initialize(this.context, imagePipelineConfig);
Все равно Кэш не обновляется образом из сети.
Я не знаю, что здесь пошло не так. Может быть, я вообще неправильно понял Фреско. В любом случае, я застрял здесь и не знаю, как действовать дальше. Я просматривал документы пару раз и из-за моего невезения я мог пропустить что-то важное. Пожалуйста, укажите мне правильное направление.