我想将我的图像存储在一个 sqlite db 中,在 blob-s 中,并且可能对它们进行加密。是否可以将 Android-Universal-Image-Loader 与来自 sqlite 数据库的图像一起使用?
			
			3346 次
		
1 回答
            21        
        
		
UIL 不支持开箱即用的 SQLite DB 中的图像。但是您可以自己添加此支持,您只需要提出新的方案/协议名称(例如db://),实现自己的ImageDownloader并将其设置为配置。
例如:
让我们选择自己的方案db,以便我们的 URI 看起来像"db://..."。
然后实施ImageDownloader。我们应该用我们的方案捕获 URI,对其进行解析,在 DB 中找到所需的数据并为其创建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);
然后我们可以执行以下操作来显示来自 DB 的图像:
imageLoader.displayImage("db://mytable/13", imageView);
于 2013-04-27T19:23:45.933   回答