Android的通用图像加载器可以使用sqlite db中的图像吗?

Tam*_*mas 12 database sqlite android universal-image-loader

我想将我的图像存储在一个sqlite数据库中,在blob-s中,并可能加密它们.是否可以将Android-Universal-Image-Loader与sqlite数据库中的图像一起使用?

nos*_*a13 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我们将其设置ImageLoader为配置:

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

ImageLoader.getInstance().init(config);
Run Code Online (Sandbox Code Playgroud)

然后我们可以执行以下操作来显示来自DB的图像:

imageLoader.displayImage("db://mytable/13", imageView);
Run Code Online (Sandbox Code Playgroud)