2017-05-26 138 views
0

我在图像视图中显示个人资料照片,该图像与具有Volley Post请求的网站中的用户详细信息一起显示。我脱机预览功能工作在SQLite数据库中保存base64 encdoed图像VS将图像保存在手机/存储卡上

(所有搜索历史,将显示配置文件数据与轮廓图像脱机工作)我不知道,什么是做的最好的方法:通过保存编码

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

如果有人也分享两种情况下的优点和缺点(如表现和资源问题),那将会很棒。

+0

检查此https:// stackoverflow .com/questions/13827412/save-image-in-sqlite-database-from-android –

回答

0
  1. 在数据库中存储大块数据不是很有成效。
  2. 对于二进制数据,有BLOB数据类型。 Base64编码 - 解构在这里是多余的。
  3. 您可以使用随时可用的图像下载程序,例如GlidePicasso。它们已经附带缓存功能。
0

我认为这是比较容易的图像存储在文件系统中,在应用程序的专用区域,如果你需要一些相关的数据的图像,只是存储的文件名作为数据库中的字段。

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

+0

谢谢@Juan我会将文件存储在手机内存中,而不是数据库。 –

0

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

首先,您不必使用“排空发布”请求获取图像详细信息。你只需要传递给毕加索的网址,它会管理你,你。

其次,由于毕加索已拥有自己的缓存功能,因此您也不需要在本地为缓存功能存储图像数据。

这里是你如何可以毕加索库添加到您的项目

首先,通过摇篮下载最新的JAR或抢:

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

+0

感谢您的想法,但我不想涉及另一个图书馆。 :) –