Используя Glide для Android, какой хороший способ использовать (локальные) альтернативные источники для URL-адресов?

Я использую Glide для загрузки изображений в свое приложение для Android:

Glide.with(context) .load("http://www.example.com/whatever/icon.png") .into(imageView);

Я хотел бы объединить некоторые изображения в APK-файл моего приложения, чтобы убедиться, что они всегда доступны, даже если устройство находится в автономном режиме. Я все еще хотел бы использовать Glide, чтобы извлечь выгоду из таких функций, как кэширование в памяти изображений с измененным размером, загрузка и масштабирование в фоновом потоке, а также чтобы интерфейс для отображения изображений оставался согласованным.

Каждое изображение, которое мне нужно загрузить таким образом, определяется URL-адресом. Если есть локальная версия (имя локального файла создается с использованием части URL-адреса [например, замена "http://www.example.com/" с "file:///android_asset/bundled_images/whatever/" ] в строке URL), я хотел бы использовать его. Если нет, изображение необходимо загрузить с фактического URL-адреса.

Вот пример:

У меня есть изображение по адресу http://www.example.com/whatever/icon.png Я включу этот образ в apk под:

/assets/bundled_images/что угодно/icon.png

Правило будет следующим:

Если файл изображения существует в локальных активах, используйте этот файл. Если образ не существует в локальных ресурсах, используйте удаленный файл.

Всякий раз, когда я запрашиваю загрузку изображения в представление изображения, я хотел бы иметь возможность использовать только полный URL-адрес (http://www.example.com/whatever/icon.png), и мой загрузчик изображений должен автоматически сначала проверить наличие локальной копии.

Могу ли я сделать что-то подобное с любой функциональностью Glide? Да, я мог бы, конечно, проверить наличие файла перед вызовом glide, но это кажется достаточно распространенным вариантом использования, что Glide может/должен иметь функцию для этого. Также было бы неплохо сделать проверку существования файлов в фоновом режиме.


person treesAreEverywhere    schedule 24.10.2015    source источник


Ответы (2)


Вы можете добиться необходимой гибкости, добавив собственные GlideModule способом, описанным здесь: Конфигурация Glide. Также вам необходимо реализовать соответствующий загрузчик Glide, который будет инкапсулировать логику загрузки. В вашем случае это может быть что-то похожее на UriLoader.

person amukhachov    schedule 21.12.2015

Glide предоставляет возможность загрузки локального изображения, если устройство находится в автономном режиме. Это можно сделать с помощью метода error().

Glide.with(this).load(imageUrl)
                .error(localImageResId)
                .into(mIconView);

Приведенный выше код загружает изображение из imageUrl и загружает его в imageView. В случае ошибки (например, устройство отключено) он загружает локальный ресурс изображения.

person Akil Adeshwar    schedule 19.12.2015