السلام عليكم ورحمه الله وبركاته
اليوم سوف اقوم بشرح كيفية حفظ اعدادات للتطبيق الخاص بك
فقط كنت اعمل على مشروع تخرجى فأردت ان قوم بحفظ مجموعه من البيانات المتغيره حسب المستخدم
مثل الـ Local Ip - Local Port , .... و اشياء اخرى
هذا ضمن عمل تطبيقى فى المشروع
لذلك قومت بالتفكير كيف اقوم بذلك وانا مبتدا فى الاندرويد
ها قد وجدتها سأقوم بعمل جدول بيانات يقوم بحفظ هذه البيانات فى قاعده البيانات الموجوده فى التطبيق
لان التطببيق ايضا كان قائم على ان يكون بداخله قاعده بيانات
لكن ما الحل اذن كيف افعل ذلك ؟؟؟
قومت بعمل Setting beans و SettingServices
لكى اقوم بالتعامل مع قاعده البيانات وانتم على درايه بكيفيه التعامل مع قواعد البيانات بنظام الـ MVC
بعد ذلك قومت ببناء Layout خاصه بالتطبيق ولكنها بصراحه كانت غير مرضية لى من حيث الشكل
لكن كيف افعل ذلك فقمت بكتابه الكثير من الكود ليكى يكون التطبيق بهذا الشكل (لايهم الخلفيه) فقط اقصد ان يكون هناك Checkbox وبعدها ListView
وبعدها قومت بعمل custom Dialog لكى اقوم بعرض البيانات الموجوده فالـ list ومن ثم اقوم بتعديلها كما فالصوره التاليه
كل هذا بالاضافه للكود الذى يتعامل مع البيانات الموجوده فاللقائمة وكيفه تعديلها مره اخرى وهكذا
مع العلم ان انا اشتغلت بمبادئ OOP لكن ذلك كلف الكثير من الوقت والمجهود
![]()
انسى الطريقة السابقة ![]()
![]()
لكن بعد ان وجدت طريقه اخرى وهى طريقه كنت رايت شكلا لها فى برنامج من قبل لكن كنت أتسائل كيف تم فعل هذا الشكل
فوجدته سهل جدا وبسيط ابسط مما تتخيل مع استخدام الـ Preferences تمكنك من عمل ذلك بشكل افضل وتقوم ايضا بحفظ البيانات داخليا داخل الموبيل
دون الحاجه الى قواعد بيانات او خلافه
وعند التعديل يكون ايضا عن طريق Dialog
الطريقتان ممكن ان نقول متشابهان فالوصول للحل
لكن الطريقه الثانيه افضل واسهل بكثير من الاولى وعن تجربه :)
فكيف يمكن استخدام الطريقه الثانيه ؟؟؟
كل ما عليك فعله هو ان تقوم بعمل مجلد xml داخل المجلد res لكى يحتوى على ملفات الـ Preference
كما بالصوره
بعد ذلك تقوم بعمل ملف xml جديد كما ايضا موضح بالصوره المسبقه انه login_prefs.xml
وهو يحتوى على الكود التالى
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:title="Voice Guide"
android:key="voice_guide"
android:summary="Play voice Guide"
android:defaultValue="true"
/>
<EditTextPreference
android:title="Local IP"
android:key="local_ip"
android:summary="Change Local Ip"
android:defaultValue="192.168.1.10"
/>
<EditTextPreference
android:title="Local Port"
android:key="local_port"
android:summary="Change Local Port"
android:defaultValue="80"
/>
<EditTextPreference
android:title="Public IP"
android:key="public_ip"
android:summary="Change Public IP"
android:defaultValue="41.44.213.33"
/>
<EditTextPreference
android:title="Public Port"
android:key="public_port"
android:summary="Change Public Port"
android:defaultValue="5353"
/>
<EditTextPreference
android:title="SMS Phone"
android:key="sms_phone"
android:summary="Change SMS Phone number"
android:defaultValue="01114456657"
/>
</PreferenceScreen>فستجد ان العنصر الاول CheckBoxPreference هو خاص ببناء عنصر للـ Checkbox
والعناصر الاخرى كلها من النوع EditTextPreference هو خاص ببناء عنصر او صف يحتوى على الـ EditText
ولكن دعنا نرى ماذا يعنى
android:title وهو عباره عن العنوان الذى يكون خارج العنصر
android:key وهو عباره عن الـ key الذى سوف نصل اليه عن طريق الكود , مجازا ممكن ان نقول عليه ID
android:summary وهو عباره عن جمله تعرف ماذا يفعل هذا العنصر
android:defaultValue وهى القيه الافتراضيه
وتختلف حسب النوع فى حاله الـ CheckBoxPreference تجد انك تقوم بوضع true او false
فى حاله الـ EditTextPreference يكون القيمه الافتراضيه عباره عن قيمة String
بعد ذلك سوف نقوم بعمل الـ Activity الخاص بتشغيل الـ Preference
لكن هذه المره ليس Activity عادى ولكنه PreferenceActivity التى ترث من الـ Activity class
وبدلا من استدعاء الداله setContentView سوف نقوم باستدعاء داله اخرى addPreferencesFromResource
public class PreferencesActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.login_prefs);
}
}وها قد انتهينا من عمل الـ Layout وتشغيله عن طريق الـ PreferencesActivity
يتبقى شىء واحد وهو كيفيه استرجاع القيم الموجوده بداخله ؟
الامر بسيط جدا
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
نقوم بعمل مرجعيه للـPreference الموجوده فالجهاز عن طريق الـ PreferenceManager
وبعد ذلك نقوم باستخراج البيانات عن طريق الـ key الذى تم وضعه لكل عنصر مسبقا
مثلا
فى حاله CheckBoxPreference نحتاج فقط لمعرفه هل true او false
فيكون بهذا الشكل
prefs.getBoolean("voice_guide", true);voice_guide هو الـ key
لكن ماذا عن true ؟؟؟ فهى هنا المدخل الثانى للداله وهو ما يكون القيمه الافتراضيه فى حاله ان لم يتم وجود او تسجيل الـ Preference من قبل
وفى حاله EditTextPreference فهو يكون عباره عن String
prefs.getString("local_ip", "LOCAL_IP_NA");ليكون الكود فى حاله ان تقوم باسترجاع قيمه خاصه بالـ Preference
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean voiceGuide = prefs.getBoolean("voice_guide", true);هكذا نكون قد انتهينا من ذلك
واليكم تطبيق يوضح ذلك عن طريق عرض البيانات الموجوده فالـ Preference
وعند الضغط على القائمه يدخل على شاشه الـ Preferences وتقوم بالتعديل بها
ووعند العودة مره اخرى تجد انه قد تم تعديل البيانات وحفظها ايضا
للتحميل
بالتوفيق ان شاء الله