【发布时间】:2017-05-26 19:55:03
【问题描述】:
我正在图像视图中显示个人资料照片,该照片与用户详细信息一起从具有 Volley Post 请求的网站提取。我正在开发离线预览功能(它将离线显示所有搜索历史的配置文件数据和配置文件图像)
我不确定,最好的方法是什么:
- 通过将编码字符串保存在 SQLite db 中并在需要时提取和解码?
- 通过将解码后的图像保存在手机或 SD 卡内存中?
如果有人也分享这两种情况的优缺点(如性能和资源问题),那就太好了。
【问题讨论】:
我正在图像视图中显示个人资料照片,该照片与用户详细信息一起从具有 Volley Post 请求的网站提取。我正在开发离线预览功能(它将离线显示所有搜索历史的配置文件数据和配置文件图像)
我不确定,最好的方法是什么:
如果有人也分享这两种情况的优缺点(如性能和资源问题),那就太好了。
【问题讨论】:
我认为将图像存储在文件系统中,在应用程序的私有区域中更容易,如果您需要与某些数据相关的图像,只需将文件名作为字段存储在数据库中即可。
处理 BLOB 字段需要大量样板代码,我认为这样做没有什么好处。
【讨论】:
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
【讨论】: