استخدام الـ LiveData في الـ DAO

Mohammad Laifمنذ 5 سنوات

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

في هذا الدرس سنتعرف على LiveData وسنتعلم كيفية استخدام الـ LiveData وتطبيقها بداخل واجهات interface DAO حتى نهيئ المشروع لإنشاء قاعدة بيانات الـ Room.

 

ماذا سوف تقرئ في هذا الدرس؟

  • ماهي الـ LiveData.
  • ماهي فوائد الـ LiveData.
  • كيفية اسستخدام الـ LiveData.
  • كيفية عمل الـ LiveData.
  • طريقة استخدام الـ LiveData في داخل الـ DAO.

 

ماهي الـ LiveData؟

https://www.youtube.com/watch?v=OMcDk2_4LSk


الـ 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؟

  1. ننشئ عنصر من الـ LiveData بداخل الـ ViewModel (سنعمل هذا في الدروس الاتيه).
  2. ولإستخدامها بداخل الـ Context كالـ Activity ننشئ عنصر Observer (سنعمل هذا في الدروس الاتيه بداخل الـ Actiivty).
  3. ولإستخدامها خارج الـ Context نقوم باستخدام ObserverForever والذي سيسمح لنا بأنشاء Observer لايتوقف, ولإيقافه نستخدم الدالة removeObserver (سنعمل هذا في الدروس الاتيه لإجراء الاختبارات test عليها).
  4. ولإستخدامها لعناصرك الخاصة تستطيع جعلهم LifeCycle Aware (للمزيد من المعلومات اطلع على المصدر LifeCycle).

 

كيفية عمل الـ LiveData؟

عند تحديث اي معلومات بداخل عنصر الـ LiveData ستقوم هي بدورها بارسال هذه المعلومات الجديدة الى كل Observer مرتبط بها. اي انك عندما تقوم بتعديل او حذف او اضافة اي بيانات بداخل الـ LiveData ستقوم هي بارسال هذه التحديثات الى اي Context مرتبطه معها.

 

ماذا سننشئ؟

سنقوم بالتعديل على الواجهه التي انشئناها سابقاً وهي SubjectDao و حتى نجعل بعض من دوالها تقوم بارجاع LiveData.

 

لدينا دالتين في الواجهه السابقة SubjectDao وهما:

  1. دالة getAllSubject تقوم بأرجاع قائمة من عناصر الـ SubjectEntity.
  2. دالة 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();

}

 

نهاية الدرس

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

 

المصادر:

التعليقات (2)

م. خديجة باحويرث:

محتوى منظم و تبسيط لمعلومات صعبة بطريقة سلسلة.

مجهود عظيم

Mohammad Laif:

شكراً على ابداء رأيك الرائع المشجع وعلى القرائه.

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !