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

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

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

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<String> results = new ArrayList<String>(); results.add("Your Preferred name is: " + prefName); this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results)); } 

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

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

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

Не рекомендуется хранить изображение в настройках Share. И вы должны сохранить это изображение на SD-карте. Затем сохраните путь к изображению (с SD-карты) в настройках 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(); 

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

 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); }