Как сохранить изображения с помощью sharedpreference в android?

Я хочу сохранить изображения в android, используя sharedpreference. У меня есть два classа активности, когда я нажимаю кнопку первой активности, она вызывает второе действие, а второе действие отображает мое предпочтительное имя в виде списка, а также сбрасывает обои андроида на изображение, которое я установил в качестве предпочтительного обоев в первая деятельность.

Для второго действия код:

public class PreferencesActivityTest extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); String prefName = myPrefs.getString("PREF_USERNAME", "nothing"); String wallPaper = myPrefs.getString("PREFS_NAME", null); if(wallPaper != null) { try { Bitmap bm = BitmapFactory.decodeFile("/data/misc/wallpaper/"+wallPaper); Log.d(getClass().getSimpleName(),"Wallpaper name is: "+ wallPaper); setWallpaper(bm); Toast.makeText(this, "Wall paper has been changed." + "You may go to the home screen to view the same", Toast.LENGTH_LONG).show(); } catch (FileNotFoundException fe){ Log.e(getClass().getSimpleName(),"File not found"); } catch (IOException ie) { Log.e(getClass().getSimpleName()," IO Exception"); } } ArrayList results = new ArrayList(); results.add("Your Preferred name is: " + prefName); this.setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,results)); } 

Первое действие вызывает второе действие, но оно не вызывает if(wallPaper != null){}

Почему он не работает?

Не рекомендуется хранить изображение в настройках Share. И вы должны сохранить это изображение в sdcard. Затем сохраните путь к изображению (из sdcard) в параметры Share, подобные этому –

  SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this); Editor edit=shre.edit(); edit.putString("imagepath","/sdcard/imh.jpeg"); edit.commit(); 

а затем получить изображение из SD-карты, используя этот путь

Все, что вам нужно сделать, – преобразовать изображение в его строковое представление Base64 :

 Bitmap realImage = BitmapFactory.decodeStream(stream); ByteArrayOutputStream baos = new ByteArrayOutputStream(); realImage.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] b = baos.toByteArray(); String encodedImage = Base64.encodeToString(b, Base64.DEFAULT); textEncode.setText(encodedImage); SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this); Editor edit=shre.edit(); edit.putString("image_data",encodedImage); edit.commit(); 

и затем, при извлечении, преобразуйте его обратно в bitmap:

 SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(this); String previouslyEncodedImage = shre.getString("image_data", ""); if( !previouslyEncodedImage.equalsIgnoreCase("") ){ byte[] b = Base64.decode(previouslyEncodedImage, Base64.DEFAULT); Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length); imageConvertResult.setImageBitmap(bitmap); } 

Однако я должен сказать вам, что поддержка Base64 только недавно включена в API8. Чтобы настроить более низкую версию API, вам необходимо добавить ее в первую очередь. К счастью, у этого парня уже есть необходимый учебник.

Кроме того, я создал быстрый и грязный пример, который я публикую в github.

Привет, друзья, я получил решение вышеуказанной проблемы. Здесь я отправляю свой полный исходный код, чтобы другие могли использовать это решение.

Это мое второе решение по этой проблеме. Уже я пишу один ответ, это другой ответ на тот же вопрос. Как сохранить изображение в общих предпочтениях в Android | Общая проблема с предпочтением в Android с изображением .

Выполните следующие шаги: –

  1. Объявить bitmap и String как статические

     public static final String PRODUCT_PHOTO = "photo"; public static Bitmap product_image; 
  2. В onCreate () напишите некоторый код.

     //---------set the image to bitmap product_image= BitmapFactory.decodeResource(getResources(), .drawable.logo); //____________convert image to string String str_bitmap = BitMapToString(product_image); //__________create two method setDefaults() andgetDefaults() setDefaults(PRODUCT_PHOTO, str_bitmap, this) getDefaults(PRODUCT_PHOTO, this); 
    1. напишите ниже код в методах

    SetDefaults ();

     public static void setDefaults(String str_key, String value, Context context) { SharedPreferences shre = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor edit=shre.edit(); edit.putString(str_key, value); edit.apply(); } 

3.2.setDefaults ();

  public static String getDefaults(String key, Context context) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getString(key, null); } 
  1. BitMapToString ();

     public static String BitMapToString(Bitmap bitmap) { ByteArrayOutputStream baos=new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG,100, baos); byte[] arr = baos.toByteArray(); return Base64.encodeToString(arr, Base64.DEFAULT); } 

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

  2. Объявить строку как статическую

     public static final String PRODUCT_PHOTO = "photo"; String str_bitmap; private Bitmap bitmap; private ImageView imageView_photo; 

    В onCreate ():

      //--------get image form previous activity,here ProductActivity is my previous activity. str_bitmap =ProductActivity.getDefaults(PRODUCT_PHOTO, this); //-------------- decode the string to the bitmap bitmap=decodeBase64(str_bitmap); //----------- finally set the this image to the Imageview. imageView_photo.setImageBitmap(bitmap); 

для decodeBase64 ();

  public static Bitmap decodeBase64(String input) { byte[] decodedByte = Base64.decode(input, 0); return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); } 
  • В чем преимущество использования fragmentов в Android, а не Views?
  • застрял в получении снимка камеры при использовании вкладки «Активность»
  • aapt не найден по правильному пути
  • Android: Окрашивание части строки с помощью TextView.setText ()?
  • Как проверить активность на переднем плане или на видимом фоне?
  • Android: рисование canvasа в ImageView
  • Фильтр намерений Android: связать приложение с расширением файла
  • как отображать карту в android с маркером
  • Класс BaseAdapter не будет устанавливать адаптер внутри Asynctask - Android
  • Отображать fragment просмотра в fragmentе
  • ViewPager wrap_content не работает
  • Давайте будем гением компьютера.