2012-01-24 43 views
1

我的应用程序允许用户使用相机拍摄照片并将其保存为他们的个人资料照片。一次只能存储一个图像?Android - 在设备上存储图像?

  • 为此目的使用SharedPrefertences是一个坏主意,虽然我只存储1个图像? (将图像转换为Base64)。有什么缺点?
  • 如果使用共享偏好来存储图像不是一个好主意,有什么选择?

回答

2

我认为在SharedPreferences中存储二进制数据不是一个好主意。而是将其保存到文件系统。例如,如果数据来自InputStream:

storeImage(new File(context.getFilesDir().getAbsolutePath() + fileDir), 
      is, 
      "profile.png"); 

public static void storeImage( 
      File fileDir, 
      InputStream inputStream, 
      String fileName) throws IOException { 
    File file = new File(fileDir,fileName); 
    FileOutputStream fos = new FileOutputStream(file); 
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
    inputStream.close(); 
    fos.close(); 
    bitmap.recycle(); 
    bitmap = null; 
} 

其中上下文可以是应用程序/活动上下文。

+0

[apply](http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply())提供的简单后台工作如何? “您不必担心Android组件生命周期以及与apply()写入磁盘的交互,该框架确保在切换状态之前从apply()完成正在进行的磁盘写入。”当你进入文件系统级别时,你可以阻止你的主线程处理线程。 –

1

没有理由为什么你不能使用SharedPreferences单个图像存储为Base64字符串,当然,这不是一个真正的可扩展的方法时,SharedPreferences被加载,每个图像将被加载到内存中的曾经,但那不是你想要的。

您可以采取的其他可能的方法是将存储图像或者使用internalexternal存储API,或者他们在一个database

存储一般对于这种事情,你应该寻找使用其他的东西然而,在这种情况下,我看不到您提出的方法存在实际问题。