android - studio - sharedpreferences شرح




كيف يمكنني تخزين الصور باستخدام sharedpreference في android؟ (2)

أرغب في حفظ الصور في 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){}

لماذا لا تعمل؟


كل ما عليك فعله هو تحويل صورتك إلى تمثيل سلسلة 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. لاستهداف الإصدار الأقل من واجهة برمجة التطبيقات ، يلزمك إضافته أولاً. لحسن الحظ ، هذا الرجل لديه بالفعل البرنامج التعليمي اللازم.

أيضا ، لقد قمت بإنشاء مثال سريع وقذيف أنشر على جيثب.


لا ينصح بتخزين الصور في تفضيلات المشاركة ويجب تخزين هذه الصورة على sdcard.And ثم تخزين مسار الصورة (من sdcard) إلى تفضيلات مشاركة مثل هذا--

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

ثم جلب صورة من sdcard باستخدام هذا المسار





android