استخدام الـ LiveData في الـ DAO
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذا الدرس سنتعرف على LiveData وسنتعلم كيفية استخدام الـ LiveData وتطبيقها بداخل واجهات interface DAO حتى نهيئ المشروع لإنشاء قاعدة بيانات الـ Room.
ماذا سوف تقرئ في هذا الدرس؟
- ماهي الـ LiveData.
- ماهي فوائد الـ LiveData.
- كيفية اسستخدام الـ LiveData.
- كيفية عمل الـ LiveData.
- طريقة استخدام الـ LiveData في داخل الـ DAO.
ماهي الـ LiveData؟
الـ LiveData كلاس تحمل في داخلها البيانات مع ميزة كونها على علم باحداث الـ LifeCycle الموجودة بها للـ Context كـ activities, fragments, or services. اي انها تعتبر Observer وتعمل على تزويد الـ Context بالبيانات عندما تكون في حالات النشاط كـ RESUMED او STARTED.
ماهي فوائد الـ LiveData؟
- تستخدم الـ LiveData نمط الـ Observer حتى تضمن لك تحديث الـ UI بالبيانات اول بأول.
- تقيك مشاكل الـ Memory Leaks.
- لامزيد من مشاكل التي تسببهم الـ Activie عند التوقف عن العمل.
- لاحاجة الى الى التعامل مع Lifecycle كحالاتها resume state, pause, stop.
للمزيد اطلع على المصدر The Advantages of Using LiveData.
كيفية استخدام الـ LiveData؟
- ننشئ عنصر من الـ LiveData بداخل الـ ViewModel (سنعمل هذا في الدروس الاتيه).
- ولإستخدامها بداخل الـ Context كالـ Activity ننشئ عنصر Observer (سنعمل هذا في الدروس الاتيه بداخل الـ Actiivty).
- ولإستخدامها خارج الـ Context نقوم باستخدام ObserverForever والذي سيسمح لنا بأنشاء Observer لايتوقف, ولإيقافه نستخدم الدالة removeObserver (سنعمل هذا في الدروس الاتيه لإجراء الاختبارات test عليها).
- ولإستخدامها لعناصرك الخاصة تستطيع جعلهم LifeCycle Aware (للمزيد من المعلومات اطلع على المصدر LifeCycle).
كيفية عمل الـ LiveData؟
عند تحديث اي معلومات بداخل عنصر الـ LiveData ستقوم هي بدورها بارسال هذه المعلومات الجديدة الى كل Observer مرتبط بها. اي انك عندما تقوم بتعديل او حذف او اضافة اي بيانات بداخل الـ LiveData ستقوم هي بارسال هذه التحديثات الى اي Context مرتبطه معها.
ماذا سننشئ؟
سنقوم بالتعديل على الواجهه التي انشئناها سابقاً وهي SubjectDao و حتى نجعل بعض من دوالها تقوم بارجاع LiveData.
لدينا دالتين في الواجهه السابقة SubjectDao وهما:
- دالة getAllSubject تقوم بأرجاع قائمة من عناصر الـ SubjectEntity.
- دالة getSubjectById تقوم بارجاع عنصر واحد من الـ SubjectEntity.
@Query("SELECT * FROM subjects")
List<SubjectEntity> getAllSubject();
@Query("SELECT * FROM subjects WHERE subject_id = :id")
SubjectEntity getSubjectById(int id);
والان سنقوم بعمل Wrapper لهم باستخدام الـ LiveData كالتالي:
@Query("SELECT * FROM subjects")
LiveData<List<SubjectEntity>> getAllSubject();
@Query("SELECT * FROM subjects WHERE subject_id = :id")
LiveData<SubjectEntity> getSubjectById(int id);
لاحظ الفرق البسيط في اننا فقط قمنا بتغليفهم بالـ LiveData.
لتصبح الواجهه الكامله على النحو التالي:
package com.mzdhr.flashcards.database.dao;
import android.arch.lifecycle.LiveData;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
import com.mzdhr.flashcards.database.entity.SubjectEntity;
import java.util.List;
@Dao
public interface SubjectDao {
@Query("SELECT * FROM subjects")
LiveData<List<SubjectEntity>> getAllSubject();
@Query("SELECT * FROM subjects WHERE subject_id = :id")
LiveData<SubjectEntity> getSubjectById(int id);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertSubject(SubjectEntity subjectEntity);
@Update(onConflict = OnConflictStrategy.REPLACE)
void updateSubject(SubjectEntity subjectEntity);
@Delete
void deleteSubject(SubjectEntity subjectEntity);
@Query("DELETE FROM subjects")
void deleteAll();
}
نهاية الدرس
فضلاً اذا اعجبك الدرس لاتنسى الضغظ على زر اعجبني ولنشر الفائدة قم بمشاركته مع من تحب. ولاتنسى تتبع الدرس حتى تطلع على التغييرات والتحديثات المتعلقه به مستقبلاً. وكذلك الامر بالنسبة للدورة من تتبع و اعجاب ومشاركة حتى يصلك جديد الدروس المتعلقه بها.
المصادر:
محتوى الدورة
عن الدرس
7 إعجاب |
3 متابع |
0 مشاركة |
2744 مشاهدات |
منذ 6 سنوات |
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !