我想将我的图像存储在 sqlite 数据库中的 blob-s 中,并可能对其进行加密。 是否可以将 Android-Universal-Image-Loader 与来自 sqlite 数据库的图像一起使用?
最佳答案
UIL 不支持开箱即用的 SQLite 数据库中的图像。但是你可以自己添加这个支持,你只需要想出新的方案/协议(protocol)名称(例如 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);
关于android - Android 的通用图像加载器可以处理来自 sqlite 数据库的图像吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231489/