Я хотел бы сохранить мои изображения в sqlite db, в blob-s и, возможно, зашифровать их. Можно ли использовать Android-Universal-Image-Loader с изображениями из базы данных sqlite?
Может ли универсальный загрузчик изображений для android работать с изображениями из sqlite db?
Ответ 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);