2015-12-20 5 views
0

У меня есть активность в моем приложении, которое должно сохранить некоторые данные, и что данные должны быть получены от другой активности, поэтому я использую SharedPreferences для этого, проблема в том, что при попытке попробовать чтобы сохранить растровое изображение в ImageView с:Android SharedPreferences Сохранить bitmap

ImageButton imgView = (ImageButton) findViewById(R.id.UserImageButton); 
Bitmap bitmap = ((BitmapDrawable)imgView.getDrawable()).getBitmap(); 
editor.putInt("bitmap", bitmap); 

Или непосредственно:

ImageButton imgView = (ImageButton) findViewById(R.id.UserImageButton);; 
editor.putInt("bitmap", ((BitmapDrawable)imgView.getDrawable()).getBitmap()); 

Но это не распространяется работу. Как его сохранить? Большое спасибо

+1

Вам нужно сохранить его в строке base64, а не int –

+2

Возможный дубликат [Как сохранить изображения с помощью sharedpreference в android?] (Http://stackoverflow.com/questions/8586242/how-can-i-store -images-using-sharedpreference-in-android) –

+1

Сохраните изображение в обычном файле. – CommonsWare

ответ

0

Вы можете добавить только значения Boolean, Float, Int, Long, String в SharedPreference. Но одна вещь, которую вы можете сделать, это преобразовать Bitmap в Base64 String. И после извлечения его из SharedPrefrence конвертируйте его в Bitmap.

Используй следующий метод для преобразования растрового изображения в массив байт:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object 
byte[] b = baos.toByteArray(); 

для кодирования base64 от использования массива байт следующего метода

String encoded = Base64.encodeToString(b, Base64.DEFAULT); 
And Save it to SharedPrefrence. 

Теперь, предполагая, что данные изображения в виде строки под названием закодировано, следующее должно дать вам битмап из строки Base64:

byte[] imageAsBytes = Base64.decode(encoded.getBytes()); 
ImageView image = (ImageView)this.findViewById(R.id.ImageView); 
image.setImageBitmap(BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)); 

:)

+0

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

-1

Не является основанием для хранения всего растрового изображения в SharedPreferences. Сохраните его как обычный файл. Если вам нужно хранить что-либо в SharedPreferences, просто сохраните путь к файлу.

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