我希望将我的图像以blob格式存储在sqlite数据库中,可能还要对它们进行加密。 是否可以使用Android-Universal-Image-Loader从sqlite数据库加载图像?
我希望将我的图像以blob格式存储在sqlite数据库中,可能还要对它们进行加密。 是否可以使用Android-Universal-Image-Loader从sqlite数据库加载图像?
UIL默认情况下不支持从SQLite数据库中获取图像。但是您可以自己添加此功能,只需想出新的方案/协议名称(例如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);
SqliteImageDownloader
构造函数中打开了数据库。 - Dory