在SQLite DB VS中保存base64 encdoed图像在电话/卡内存中保存图像

时间:2017-05-26 11:10:25

标签: android sqlite

我正在图像视图中显示个人资料照片,该照片与来自具有Volley Post请求的网站的用户详细信息一起被拉出。我正在处理离线预览功能(将显示所有搜索历史记录的配置文件图像离线的配置文件数据)

我不确定,最好的方法是什么:

  • 通过在SQLite数据库中保存编码字符串并在需要时进行拉取和解码?
  • 通过将解码图像保存在手机或SD卡存储器上?

如果有人同时分享这两种情况的利弊(如性能和资源问题),那就太棒了。

3 个答案:

答案 0 :(得分:0)

  1. 在数据库中存储大块数据效率不高。
  2. 对于二进制数据,有BLOB数据类型。 Base64 encoding-deconding在这里是多余的。
  3. 您可以使用即用型图片下载程序,例如GlidePicasso。它们已附带缓存功能。

答案 1 :(得分:0)

我认为将图像存储在文件系统,应用程序的私有区域中更容易,如果需要与某些数据相关的图像,只需将文件名存储为数据库中的字段即可。

处理BLOB字段需要大量的样板代码,我不认为这样做有很多好处。

答案 2 :(得分:0)

Picasso是管理您的方案的最佳方式。

首先,您不必使用Volley Post请求来获取图像详细信息。你只需要将网址传递给毕加索,它就会为你管理它。

其次,您也不需要在本地存储图像数据以用于缓存功能,因为Picasso已经拥有自己的缓存功能。

以下是如何将Picasso库添加到项目中

首先,下载最新的JAR或通过Gradle抓取:

compile 'com.squareup.picasso:picasso:2.5.2'

然后获取图像并将图像添加到imageView

Picasso.with(context)
.load(imageUrl)
.networkPolicy(NetworkPolicy.OFFLINE)
.
.into(imageView, new Callback() {
@Override
public void onSuccess() {

}

@Override
public void onError() {
    //Try again online if cache failed
    Picasso.with(context)
            .load(getImageUrl())
            .error(R.drawable.header)
            .into(imageView, new Callback() {
        @Override
        public void onSuccess() {

        }

        @Override
        public void onError() {
            Log.v("Picasso","Could not fetch image");
        }
    });
}
});

完成implementation

相关问题