حفظ قيمة Shared Preferences بأبسط الطرق للاندرويد

بسم الله الرحمن الرحيم

– كيفية حفظ قيمة واستخدامها في كامل التطبيق, حتى الرجوع إليها في حال أغلق التطبيق.

درس جداً مهم, وقد طلب الكثير من الأصدقاء بالشرح أكثر عن Shared Preferences ونحاول قدر الإمكان تبسيط المعلومات لتسهيلها على المبتدئين في هذا المجال. اي الشرح للمبتدئين وهناك معلومات لم تذكر 🙂

سوف نحاول شرح أكثر من طريقة وكلها تدور حول آلية العمل نفسها. كما إنني سبق وقلت إن البرمجة مثل مادة الرياضيات يوجد الكثير من الطرق للوصول إلى نتيجة واحدة.

بالنسبة لـ Shared Preferences هي عبارة او فيك تعتبرها مبدئياً انو ملف لتحفظ فيه اعدادات المستخدم, حجم الخط, الصوت, اللون, و و إلخ.

عموماً لنستخدم مثال بسيط وشائع لدى الجميع, مثال ما هو اسمك ؟ .. ونستخدم الإسم في اكتفتي أخر, كما نجعله معروض بداخل الفراغ النصي حتى بعد تشغيل التطبيق من جديد.

وفي دروس لاحقا سوف نتعلم كيفية حفظ قيم مختلفة, في هذا الدرس سوف نركز على حفظ نص – سترنج \ string –

في البداية قم بإنشاء مشروع فارغ, وأجعل داخله 2 اكتفتي, الأولى يوجد فيها فراغ حقل نصي EditText وزر لحفظ القيمة وزر للانتقال للاكتفتي الاخرى. الاكتفتي الثانية اجعل فيها نص TextView لعرض تلك القيمة التي يكتبها المستخدم.

نقوم بعمل شكل مبدئي, بالشكل التالي :

layout-2015-04-30-075556

والكود له – activity_main.xml :

ما عليك فعله كمبتدئ فقط ان تلاحظ المعرفات التي قمنا باستخدامها في الكود, لتعرف لاحقاً من أين اتت عند استخدامها.

 أما الليوت الثانية, فهي بسيطة عبارة عن نص واحد.

second_layout.xml

خرجنا بحاصل سابق من كلا اللياوتات : by ID

save : الزر الذي سوف يقوم بحفظ القيمة المدخلة, مع العلم الحاجة له ليست كبيرة تستطيع عند وضع زر الانتقال يحفظ القيمة الموجودة داخل الفراغ او الحقل النصي.

editText_yourName : وهو الحقل النصي الذي تقوم بإدخال فيه القيمة ليقوم بحفظها في ملفات التطبيق. والتي تستطيع الرجوع إليها في أي اكتفتي داخل التطبيق.

Enter : الزر الذي سوف يدخلنا إلى التطبيق, أو في مثالنا هذا للانتقال بنا الى الاكتفتي الثانية.

receiver_name : النص الموجود في اللياوت الثانية والذي سوف تصبح القيمة المدخلة سابقاً مكانه.

الان هكذا نحن انتهينا من القسم الظاهر للمستخدم. جزئية xml ولنبدء بالجزء البرمجي ..

في البداية نقوم بتعريف ما قمنا بإضافته, من نصوص وأزرار داخل كل اكتفتي. ونقوم بربطها بالمعرفات التي سبق ووضعناها.

الطريقة واضحة السابقة, تعريف المتغيرات داخل الكلاس وخارج الدوال. ومن ثم ربط كل واحد منها بالمعرفات الخاصة بها.

أرجوا الانتباه على أن الربط يكون داخل الدالة الرئيسية للتطبيق وهي دالة الاون كريت.
تمام هكذا انتهينا من الربط .. ما بين المتغيرات التي ضفناها وبين الكائنات في التصميم (اللياوت).

الان لنبدء ببرمجة الاكتفتي الاول الرئيسية :
نعطي أوامر الضغط على الزر الأول وذلك بدالة الاون كليك للزر Save, نعطي له الأمر بالشكل التالي :

وهذا الكود هو أهم ما نتعلمه في درس اليوم لمن هم في المراحل المتوسطة, نحن هنا قلنا له أتي لنا بـ ملف الذاكرة او الجزئية المحفوظة في التطبيق والتي أسمها (test_name) عند القيمة التي اسمها (NAME) والمود الخاص بها 0.
كتابة الـ getSharedPreferences بالصيغة العامة التالية :

getSharedPreferences (String name, int mode)

قلنا له سابقاً هكذا ولكن لا مانع إن كانت هذه القيم غير موجودة اصلاً .. فنحن قلنا له أسفل في الكود,

test_name.edit();

والمعنى عدل على الذي طلبنا, وإن لم يكن موجود قم بإنشائه.
بصراحة الموضوع في هذا الأمر طويل وأحاول اختصاره لكن لا أريد أحد أن يستاء منه فهو جداً جداً جداً مهم. وأحاول التبسيط قدر الإمكان. 

عموماً اغلب القيم في استخدامها أول مرة أضع انت ما شاءت ولكن متغيرات تعرفها وتحفظها جيداً لتعرف ما انت حافظ بداخلها, من ثم تقم باستدعائها في مكان آخر لاستخدامها. وفي حال تم الغاء تثبيت التطبيق سوف تحذف ولكن في حال الخروج من التطبيق والرجوع اليه تبقى موجودة. وهي خاصية تستخدم كثيراً في حفظ مثلاً قيمة المجموع لديك , اخر مرحلة قم بالوصول اليها, معلوماتك الشخصية و و و إلخ .. لها استخدامات كثيرة. وتقوم كذلك بحفظ اعدادات التطبيق للمستخدم.

بالنسبة لـ mode افتراضياً او الغالب له قيمة 0 أو MODE_PRIVATE و كذلك تستطيع استخدام قيمتين وهي MODE_WORLD_READABLE و MODE_WORLD_WRITEABLE وهي واضحة نوعاً ما أحدها لقراءة هذه الاعدادات او الملف الصغير الحجم, والاخر للتعديل عليه. ولكن أفضل لك استخدام قيمة الصفر كمبتدئين 🙂

كما ذكرنا في الكود السابق :

editor.putString(“name”, Name.getText().toString());

قلنا له التعديل الذي نريده قم بحفظ متغير بإسم name وهو الاسم الذي سوف نستخدمه لطلب القيمة التي بداخل Name والذي هو الحقل النصي المستخدم لكتابة اسم المستخدم.

والآن لنستخدم هذه القيمة بعد حفظها, اي بعد الضغط على زر الحفظ, نستخدمها في كلا الاكتفتي .. في الاكتفتي الاول نجعلها بداخل الحقل النصي .. أي في حال المستخدم كتب اي معلومة وضغط على زر الحفظ .. وقام باغلاق التطبيق والرجوع اليه يجدها مكتوبة في مكانها.
و أما استخدامها الآخر في الاكتفتي الثانية بنفس الطريقة فقط لتظهر القيمة التي استخدمها.

أنا استفدت من هذه العملية في تطبيق تحكم بالمصروفات, لإدخال المستخدم راتبه وفي حال الرجوع اليه يجده وكذلك استخدم راتبه في الحسابات.

إذا الآن بخارج دالة الاون كليك وبداخل دالة الاون كريت, أقوم بإستخدام القيمة التي قمت بحفظها بداخل زر الحفظ, وذلك كما ذكرنا سابقاً لاستخدمها.
نستخدم الكود بالشكل التالي :

SharedPreferences test_name = getSharedPreferences(“NAME”, 0);
Name.setText(test_name.getString(“name”, “”).toString());

قلنا له أتي لنا بـ test_name ولم نطلب منه التعديل كما فعلنا سابقاً .. فقط أتي لنا به , ومن ثم قلنا للحقل النصي Name قم بوضع نص داخلك وهو النص الذي قمنا بحفظه سابقاً داخل الـ test_name وبداخل القيمة name.

بعدها برمجنا زر الانتر بطريقة المعروفة للانتقال بنا من الاكتفتي الاول الى الثانية.

Intent i = new Intent(MainActivity.this,Second_Activity.class);
startActivity(i);

هكذا انتهينا من الاكتفتي الاولى والان لننتقل الى الاكتفتي الثانية :
كما الكود السابق ..

فقط قلنا له أتي لنا بالملف المحفوظ test_name و أما عن النص Rname قم باستبداله بالنص المحفوظ سابقاً داخل قيمة name.

وبهكذا نكون قد أنتهينا من الدرس, فهو جداً سهل وبسيط ولكن مهم كثيراً .. ومع الشرح بدا انه طويل .. لذلك سوف أدرج لكم هنا الاكتفتي الاولى والثانية هنا لتشاهدوا ان العملية جداً بسيطة.

MainActivity.java

Second_Activity.java

معاينة فيديو بعد الانتهاء من الشرح :

يوجد الكثير من الطرق كما ذكرت للوصول إلى نتيجة واحدة, ومن هذه الطرق :

بنفس الشرح السابق فقط استخدام التالي للحفظ :

SharedPreferences test_name = context.getSharedPreferences(“NAME“, MODE_PRIVATE);
Editor edit = test_name.edit();
edit.clear();
edit.putString(“name“, Name.getText().toString().trim());
edit.commit();

و لاستخدام القيمة :

SharedPreferences test_name = context.getSharedPreferences(“NAME“, MODE_PRIVATE);
String YOUR_NAME = test_name.getString(“name“, “”);

وبعدها تستخدم السترنج YOUR_NAME حيث تريد.

تستطيع حفظ أكثر من قيمة بداخل NAME بنفس الطريقة التي حفظها فيها القيمة name

إن شاء الله أكون قد شرحت المطلوب, وإن شاء الله هذا المجال واسع وسوف يكون في دروس أخرى لحفظ قيم مختلفة, والمعذرة كل المعذرة إن أخطأت فهذا الذي أستطعت فهمه من موقع مطورين اندرويد ومن مصادر اخرى.
وانتظرونا في المزيد والمزيد من الدروس .. والسلام عليكم 🙂

عن عبدالقادر عليوي

مواليد 1996 , سوري الجنسية, طالب علم, لدي شغوف كبير في تعلم كل ما يتعلق بالانترنت من تطوير وحماية, أحب القراءة كثيراً .. هدفي نشر العلم بشتى أنواعه ومجالاته, متابع من الدرجة الأولى لـ الدكتور ابراهيم الفقي و الشيخ أحمد ديدات – رحمهم الله -.

شاهد أيضاً

تحميل ملف من السيرفر لجهازك الأندرويد برمجياً

بسم الله الرحمن الرحيم في هذه التدوينة إن شاء الله سوف نتعلم كيفية تحميل ملف …

2 تعليقان

  1. جزاك لله خيرا

  2. اسامة الصرمي

    كيف احفظ هذة القيمة

    tpv1 = (ThumbUpView) findViewById(R.id.tpv1);

    tv1 = (TextView) findViewById(R.id.tv1);

    tpv1.setOnThumbUp(new ThumbUpView.OnThumbUp() {

    @Override
    public void like(boolean like) {
    if (like) {

    tv1.setText(String.valueOf(Integer.valueOf(tv1.getText().toString()) + 1));

    } else {
    tv1.setText(String.valueOf(Integer.valueOf(tv1.getText().toString()) – 1));

    }

    }
    });
    }
    public void like(View v)
    {
    tpv1.Like();

    }

    public void unlike(View v)
    {
    tpv1.UnLike();

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

6 + 1 =