Может ли универсальный загрузчик изображений для android работать с изображениями из sqlite db?

Я хотел бы сохранить мои изображения в sqlite db, в blob-s и, возможно, зашифровать их. Можно ли использовать Android-Universal-Image-Loader с изображениями из базы данных sqlite?

Ответ 1

UIL не поддерживает изображения из SQLite DB из коробки. Но вы можете добавить эту поддержку самостоятельно, вам просто нужно придумать новое имя схемы/протокола (например, db://), реализовать собственный ImageDownloader и настроить его на конфигурацию.

Например:

Позволяет выбрать собственную схему db, поэтому наши URI будут выглядеть как "db://..." .

Затем реализуем ImageDownloader. Мы должны уловить URI с помощью нашей схемы, проанализировать ее, найти необходимые данные в БД и создать для нее InputStream (это может быть ByteArrayInputStream).

public class SqliteImageDownloader extends BaseImageDownloader {

    private static final String SCHEME_DB = "db";
    private static final String DB_URI_PREFIX = SCHEME_DB + "://";

    public SqliteImageDownloader(Context context) {
        super(context);
    }

    @Override
    protected InputStream getStreamFromOtherSource(String imageUri, Object extra) throws IOException {
        if (imageUri.startsWith(DB_URI_PREFIX)) {
            String path = imageUri.substring(DB_URI_PREFIX.length());

            // Your logic to retreive needed data from DB
            byte[] imageData = ...;

            return new ByteArrayInputStream(imageData);
        } else {
            return super.getStreamFromOtherSource(imageUri, extra);
        }
    }
}

Затем мы устанавливаем эту конфигурацию ImageLoader:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        ...
        .imageDownloader(new SqliteImageDownloader(context))
        .build();

ImageLoader.getInstance().init(config);

И тогда мы можем сделать следующее для отображения изображения из БД:

imageLoader.displayImage("db://mytable/13", imageView);