Android - 将图像存储在设备上?

时间:2012-01-24 14:38:55

标签: android sharedpreferences

我的应用程序允许用户使用相机拍摄照片并将其保存为个人资料照片。一次只能存储1张图像吗?

  • 虽然我只存储1张图片,但为此目的使用SharedPrefertences是不是一个坏主意? (将图像转换为Base64)。有什么缺点?
  • 如果使用共享首选项存储图像不是一个好主意,有哪些替代方案?

2 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:1)

没有理由不能使用SharedPreferences将单个图像存储为Base64字符串,当然这不是一种可扩展的方法,就像加载SharedPreferences时一样图像会立刻加载到内存中,但这不是你想要的。

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

一般来说,对于这类事情,您应该使用除共享偏好之外的其他内容,但在这种情况下,我看不出您建议的方法存在实际问题。