2012-01-24 2 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

Как насчет легкой работы фона, которая [применяется] (http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()) обеспечивает? «Вам не нужно беспокоиться о жизненных циклах компонентов Android и их взаимодействии с apply(), записывая на диск. Структура гарантирует, что записи в полете записываются из apply() до переназначения состояний». Когда вы переходите на уровень файловой системы, вы либо блокируете свою основную прикладную нить, связанную с поточной загрузкой. –

1

Нет причин, по которым вы не можете использовать SharedPreferences для хранения единственного изображения в виде строки Base64. Конечно, это не очень масштабируемый подход, как при загрузке SharedPreferences, каждое изображение будет загружено в память на один раз, но это не то, что вы ищете.

Другие возможные подходы, которые можно предпринять, чтобы сохранить изображения, либо с помощью API-интерфейсов для хранения internal или external или хранить их в database

В целом для такого рода вещи, вы должны смотреть, чтобы использовать что-то другое чем общие предпочтения, однако в этом случае я не вижу, что существует реальная проблема для подхода, который вы предлагаете.

Смежные вопросы