القائمة الرئيسية

الصفحات

الدرس 16: كيفية حفظ واسترجاع حالة الاكتفتي في برمجة الاندرويد Activity State؟



السلام عليكم..سنتعلم في هذا الدرس كيفية حفظ حالة الـ Activity .
 لكي تكون مبرمج ينتج برامج قوية يجب أن يشعر المستخدم بالارتياح عند استخدام برنامجك غير ذلك سيقوم المستخدم بحذف برنامجك وعدم استخدامه مرة أخرى. 
وسنتعلم في هذا الدرس مايلي:


1-ماذا يقصد بالحالة stateActivity؟
2-كيفية حفظ حالة الاكتفتي Activity State؟
3-مثال تطبيقي على كيفية حفظ واسترجاع  البيانات.




1-ماذا يقصد بحالة الاكتفتي Activity State ؟


يقصد بحالة الاكتفتي Activity State  هي الحالة التي تكون عليها الشاشة كمثال اتجاه دورانها .



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

فجاة قام المستخدم بتدوير الشاشة  سيتم حذف تلك البيانات التي كان يقوم بادخالها وذلك بسبب انه عند تغيير اتجاه دورانها  يتم تنفيذ دوال دورة حياة الاكتفتي   Activity Life Cycle  وبذلك يتم فقد البيانات كما في الصورة ادناه:







نلاحظ من الصورة أعلاه انه تم فقد النص Welevom وذلك عند تغيير اتجاه دوران الشاشة.
فما هو شعورك كمستخدم ..؟ طبعا ستقوم بحذف التطبيق.


2-كيفية حفظ حالة الاكتفتي Activity State؟



ويتم ذلك باستخدام باستخدام دالتين:


والان بعد أن عرفنا الدالتين سنذكر بعض الملاحظات:

1-كلا الدالتين تستخدمان لحفظ واسترجاع البيانات الموقتة اثناء تشغيل التطبيق كمثال : قيم متغيرات.
2-عند الضغط على زر الرجوع يتم استدعاء الدالة finish وذلك لانهاء هذه الشاشة ولايتم حفظ أي بيانات .
3-يتم حفظ البيانات في اوبجكت من نوع Bundle  وهو عبارة Data Structure للاندرويد يستخدم لحفظ البيانات على شكل (key/value) ويتم استرجاع البيانات بواسطة المفتاح,, حيث يتم تخزين البيانات في اوبجكت من نوع bundle  بالطريقة الاتية:-

لتخزين البيانات نستخدك الداول putString  لتخزين قيمة نصية أو putInt لتخزين قيمة عدد صحيح  الخ ..
كمافي الكود ادناه:


1
2
3
Bundle bundle = new Bundle();
bundle.putString("ID","7823687");
bundle.putInt("ID",765)

والاسترجاع البيانات نستخدم داول مثل getString لاسترجاع قيمة نصية أو getInt لاسترجاع قيمة عدد صحيح كمافي الكود ادناه: .

1
2
3
Bundle bundle = new Bundle();
String id =bundle.getString("ID","7823687");
int num =bundle.getInt("ID",765)


 3-مثال تطبيقي على كيفية حفظ واسترجاع البيانات.


كماذكرنا عندما نريد حفظ حالة الـ Activity نستخدم الدالة   onSaveInstanceState كما في الكود ادناه:


1
2
3
4
5
6
@Override
​​​​publicvoidonSaveInstanceState(BundleoutState){
​​​​​​​​super.onSaveInstanceState(outState);
​​​​​​​​outState.putString(ID,​“1234567890);

​​​​}


والان ناتي لشرح  الكود :
الاسطر 1-3  :تعريف الدالة  واستدعاء الدالة في الكلاس الاب وذلك عبر الكلمة المفتاحية super.
السطر4: تخزين قيمة نصية "12344" بواسطة المفتاح Id.

بعد ان قمنا بحفظ القيمة النصية ستبقى القية النصية محفوظة حتى عند تدمير الـ Activity  ويمكننا استرجاع هذه القيمة بواسطة المفتاح id  كما في الكود ادناه :


1
2
3
4
5
@Override
​​​​publicvoidonRestoreInstanceState(BundlesavedInstanceState){
​​​​​​​​super.onRestoreInstanceState(savedInstanceState);
​​​​​​​​String ID=savedInstanceState.getString(ID);
​​​​}




الاسطر 1-3  :تعريف الدالة  واستدعاء الدالة في الكلاس الاب وذلك عبر الكلمة المفتاحية super.
السطر4:استرجاع القيمة النصية "12344" التي قمنا بحفظها بواسطة المفتاح Id  وتخزينها  في المتغير النصي ID.