العودة إلى موقع برمج

اريد حفظ صورة واسترجاعها باستخدام SharedPreferences

android
#1

انا استخدم الكلاس SharedPreferences في تطبيقي لحفظ حالة الradiobutton
لكني لا استطيع حفظ حالة صورة
هل هناك طريقة معينة لحفظ الصور باستخدام SharedPreferences او غيره
وشكرا
هذا الكلاس الرئيسي

private static final String PREF_FILE = "com.example.android.preferences";

private RadioButton radio1, radio2, radio3;
private SharedPreferences sharedPreferences;
private ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    radio1 = findViewById(R.id.radio1);
    radio2 = findViewById(R.id.radio2);
    radio3 = findViewById(R.id.radio3);

    imageView = findViewById(R.id.image);

    radio1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageView.setImageResource(R.drawable.paris);
        }
    });

    radio2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageView.setImageResource(R.drawable.new_york);
        }
    });

    radio3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageView.setImageResource(R.drawable.istanbul);
        }
    });

}

@Override
protected void onResume() {
    super.onResume();
    sharedPreferences = getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);

    radio1.setChecked(sharedPreferences.getBoolean(radio1.getId()+"", false));
    radio2.setChecked(sharedPreferences.getBoolean(radio2.getId()+"", false));
    radio3.setChecked(sharedPreferences.getBoolean(radio3.getId()+"", false));

    // مشكلتي في هذا السطر
    imageView.setImageResource(sharedPreferences.getInt(radio1.getId()+"", R.drawable.paris));

}

@Override
protected void onPause() {
    super.onPause();

    sharedPreferences = getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);

    sharedPreferences.edit().putBoolean(radio1.getId()+"", radio1.isChecked()).apply();
    sharedPreferences.edit().putBoolean(radio2.getId()+"", radio2.isChecked()).apply();
    sharedPreferences.edit().putBoolean(radio3.getId()+"", radio3.isChecked()).apply();

    // وايضا في هذا السطر
    sharedPreferences.edit().putString(radio1.getId()+"", "/sdcard/paris.jpg").apply();

}

هذا ملف xml للكلاس الرئيسي

<ImageView
    android:id="@+id/image"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:background="#00f"
    android:layout_marginTop="20dp"
    />

<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/group">

    <RadioButton
        android:id="@+id/radio1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Paris"
        android:layout_gravity="center"
        />
    <RadioButton
        android:id="@+id/radio2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New york"
        android:layout_gravity="center"
        />
    <RadioButton
        android:id="@+id/radio3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Istanbul"
        android:layout_gravity="center"
        />
</RadioGroup>
#2

يمكنك تحقيق ذلك من خلال:

  1. اضافة radiobuttons إلى radiogroup واستبدال setOnClickListener بالدالة setOnCheckedChangeListener.

  2. ضمن onResume تحتاج فقط لاستدعاء setCheck التي ستقوم تلقائيا بتغيير الصورة من خلال setOnCheckedChangeListener من دون حفظ الصورة ضمن sharedpreferences

ويمكنك قراءة معلومات عن setOnCheckedChangeListener من الرابط

1 Like
#4

نعم لقد تم حل المشكلة شكرا لك استاذي العزيز فادي
وشكرا للجهود التي تقدمونها في المنتدى والموقع

2 Likes
#5

لا شكر على واجب :bouquet:

يشرفنا استخدامك للمنصة ونأمل أن تحوز دائما على إعجابك ورضاك.

هل يمكنك مشاركتنا بالطريقة التي حللت بها المشكلة ليستفيد منها من تواجهه مشكلة مماثلة

1 Like
#6

الطريقة نفسها التي اخبرتني بها استاذي

1 Like