微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在DB中访问Android图像

这是一个具有画廊背景的APP.使用REST我收到(Volley)JSON,其中包含有关地点和图片链接的信息.因为有大约60个地方,所以PICASSO的缓存形式是不够的.数据存储在DB中,所以我的想法是将数据作为字节流插入数据库.它完成了,但不是很好,如下所示. AsyncTask中的代码.

@Override
protected Bitmap doInBackground(Void... params) {
    try {
        return Picasso.with(context)
                .load(site.getimageURL())
                .get();

    } catch (IOException e) {
        e.printstacktrace();
    }
    return null;
}

@Override
protected void onPostExecute(Bitmap bitmap) {
    super.onPostExecute(bitmap);

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    try {
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
    } catch (Exception e) {
        e.printstacktrace();
    }
    site.setimageBytes(stream.toByteArray());

    db.openForWrite();
    db.updateSite(site.getId(), site);
    db.close();
}

我的问题是如何提高效率,你知道更好的方法吗?我试图回调Picasso将图像添加到DB onSuccess,但它需要视图作为第一个参数.

也许有一种很好的方法可以将图像保存到SD卡,并用SD卡上的图像位置替换HTTP链接.

或者直接将图像缓存到光盘?

解决方法:

这里有几个问题需要注意:

> onPostExecute在主线程上运行.不是做磁盘IO的好地方.当图像被显示时,UI将不时冻结.
> sqlite blob仅比普通磁盘文件的速度有限(Benchmark).因此,大文件最好存储在磁盘上.
>如果您想在图像上缓存延迟加载,建议使用Picasso.问题是Picasso不允许轻松使用您的自定义“DB作为缓存”解决方案.它使用通用HTTP缓存.因此,可以定期使高速缓存的文件无效并清除.

如果您想要完全自定义HTTP和图像加载,请尝试像Volley这样的东西.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐