شرح كيفية التعامل مع SharedPreferences وتخزين البيانات اوفلاين

شرح كيفية التعامل مع SharedPreferences وتخزين البيانات اوفلاين


android studio local data base #1 : شرح كيفية التعامل مع SharedPreferences وتخزين البيانات اوفلاين


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


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


كيفية تخزين البيانات بشكل offline باستخدام SharedPreferences ؟


قم بكتابة SharedPreferences وهذا نوع لحفظ البيانات وغالبا يستخدم مع Retrofit وطبعا بما اننا سوف نشرح Local Database يجب ان نشرح كل شيئ حولها من بداية preferences الى الroom , عموما بعد كتابة التعريف الخاص بها ستجد انه يستقبل منك string key و mode قم بعمله MODE_PRIVATE , بعدها ثم بتعريف String name او يمكنك عمله Global كما فعلت انا وبعدها قم بكتابة preferences.getString وبعدها no name اذا لم يكن هناك اي اسم وبعدها قم بعمل preferences.edit لكي نقوم بتخزين كلمة وهي Geecoders وبعدها قم بعمل preferences.getString نفس السابق تماما وجرب ان تقوم بعمل Run .



في الصورة سوف تلاحظ انه في اول مره ظهر no name وبعدها Geecoders , جرب الان ان تقوم بعمل run مره اخرى لترى الفرق .



لاحظت الفرق ؟ اصبح يوجد في المرتين Geecoders ما السبب ؟ بكل بساطة اننا قمنا بتخزين كلمة Geecoders في الهاتف وهي تعمل عندما نستدعي اي name key , لهذا السبب كررنا الكود مرتين وكما نعلم انه في اي لغة برمجة تكون الخطوات step by step لذلك في اول مره لم يكن قام بتخزين اي شيئ لذلك طبع الكلمة الموجوده لديه وانقل الى التي بعدها ووجد انه قام بتخزين كلمة Geecoders في key باسم name وبعدها انتقل الى الخطوة التي بعدها ووجد انه يريد عمل نص باسم geecoders ولكنه يحتوي على key باسم name وهو قام بتخزين اسم Geecoders في هذا المفتاح لذلك طبع المخزن لديه , في المره الثانية للRun قام بطباعة كلمة Geecoders لان قام بتخزين الاسم مسبقا وعندما وجد كلمة name ذهب واحضر الاسم المخزن بداخله .


صورة لشكل الكود



الكود الموجود بالصورة . 


SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE);
name = preferences.getString("name", "no name");
Log.i(TAG, "onCreate: the name is "+name);
preferences.edit().putString("name","Geecoders").apply();
name = preferences.getString("name", "geecoders");
Log.i(TAG, "onCreate: the name is "+name);


الان دعونا نتعرف على كيفية عمل get و set للSharedPreferences قم بإنشاء class جديد باسم Data او اي اسم اخر ترغب به , في طبيعة الامر سوف نقوم بعمل الاسم و الاسم الاخير وهنا نحتاج الى 2 key فبدلنا من كتابتهم مرتين قمنا بعملهم مره واحده بالاعلى global وايضا قمنا بعمل SharedPreferences و key للكلاس بدلا من ان نكتبهم باستمرار وبعدها قم بعمل constructor وهنا سوف نمرر له Context ونقوم بكتابة التعريف كما تعرفنا سابقا ولكن لا تنسى context في البداية وايضا قبل كتابة المود لا تنسى وضع context وهذا ما يحدد حالة التطبيق الحالية او بمعنى اخر يهتم بالحالة التي تقابله , وبعدها قمنا بعمل getter & setter ووضعنا بداخلهم نفس الكود الذي وضعناه سابقا في MainActivity لكي نخزن الاسم ونستدعيه ( لا تنسى ان تمرر String وتاخذ منة object وهذا الاوبجكت سوف يكون ما ستستعمله للكتابة في main .



Data.class code


    private final String Shard_name = "data";
    private SharedPreferences preferences;
    private final String Name = "name";
    private final String Namename = "namelast";

    public Data(Context context) {
        preferences = context.getSharedPreferences(Shard_name, Context.MODE_PRIVATE);
    }

    public void setData(String name) {
        preferences.edit().putString(Name, name).apply();
    }

    public String getData() {
       return preferences.getString(Name, "no name");
    }

    public void setlastname(String lastname) {
        preferences.edit().putString(Namename, lastname).apply();
    }
    public String getlastname() {
        return preferences.getString(Namename, "no name");
    }
    


الخطوة الاخيرة وهي ان تنتقل الى MainActivity مره اخرة وقم بمسح الاكواد التي كتابناها سابق وقم بتعريف كلاس الداتا الذي قمنا بعمله وبعدها عمل context الخاص به وهو اسم الكلاس التي تتواجة فيه وبعد ذلك قم بعمل set وبعدها اسم البيانات التي تريد تغيرها وحفظها لديك في preferences في طبيعة الحال قمت بتخزين الاسم الاول احمد والاحير محمود طبعا سوف ياخذ هذة الاسماء ويتوجه بها الى كلاس Data ويخزن القيمة الاولى في key الخاص بها وياخذ القيمة الثاني ويعمل معها نفس الحالة وبعدها قمنا بطباعة المخرجات في logi لكي تظهر معنا على الشاشة بهذا المظهر .



MainActivity.class code


Data data = new Data(MainActivity.this);
data.setData("ahmed");
data.setlastname("mahmoud");
Log.i(TAG, "onCreate: " + data.getData());
Log.i(TAG, "onCreate: " + data.getlastname());


سؤال لكم : اذا قام باخذ اسم احمد و محمود ووجد انهم على نفس key هل سوف يقوم بطباعة المخرجات على اي شكل من الاشكال التالية ؟


A)- ahmed mahmoud

B)- ahmed ahmed

C)- ahmed

D)- Error


حاول ان تشاركنا باجابتك في التعليقات 


الكود كامل على github


ما تعلمناه في هذة المقالة ؟

تعلمنا ان SharedPreferences يجب ان يستخدم Key ليقوم بتخزين البيانات بداخلة , وايضا ان يحتاج منك ان تكتب له اسم mode يعمل عليه في التعريف , وايضا تعرفنا كيف نخزن بيانات سواء بشكل مباشر او من كلاس اخر .


تعليقات