【问题标题】:Saving base64 encdoed image in SQLite DB VS saving image on Phone/Card Memory在 SQLite DB 中保存 base64 编码图像 VS 在手机/卡内存中保存图像
【发布时间】:2017-05-26 19:55:03
【问题描述】:

我正在图像视图中显示个人资料照片,该照片与用户详细信息一起从具有 Volley Post 请求的网站提取。我正在开发离线预览功能(它将离线显示所有搜索历史的配置文件数据和配置文件图像)

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

  • 通过将编码字符串保存在 SQLite db 中并在需要时提取和解码?
  • 通过将解码后的图像保存在手机或 SD 卡内存中?

如果有人也分享这两种情况的优缺点(如性能和资源问题),那就太好了。

【问题讨论】:

标签: android sqlite


【解决方案1】:
  1. 在数据库中存储大量数据效率不高。
  2. 对于二进制数据,有 BLOB 数据类型。 Base64 编码-解码在这里是多余的。
  3. 您可以使用即用型图片下载器,例如GlidePicasso。它们已经附带缓存功能。

【讨论】:

    【解决方案2】:

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

    处理 BLOB 字段需要大量样板代码,我认为这样做没有什么好处。

    【讨论】:

    • 感谢@Juan 我会将文件存储在手机内存而不是数据库中。
    【解决方案3】:

    Picasso 是管理场景的最佳方式。

    首先,您不必使用 Volley Post 请求来获取图像详细信息。您只需将 url 传递给 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

    【讨论】:

    • 感谢您的想法,但我对为此涉及另一个库不感兴趣。 :)
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多