Custom Type در Android Architecture Components: Room

شنبه ۰۱ اردیبهشت ۹۷ توسط یوسف رضا مختاری

سلام! این سومین قسمت از مجموعه مقالات Android Architecture Components است .

در قسمت اول ما به معرفی اصول اولیه (موجودیت و DAO) در Room  پرداختیم . در قسمت دوم ما درباره روابط یا relationship ها در Room  صحبت کردیم.

امروز ما میخواهیم نگاه دقیق تری به  Custom type ها در موجودیت ها بیندازیم.

 

معرفی

معمولا داده هایی که در پایگاه داده قرار میگیرند دارای یک primitive type یا نوع اولیه هستند مثل String , float , Int و غیره.

اما گاهی ما نیاز به قرار دادن custom type یا نوع سفارسی در پایگاه داده داریم مثل Date , Location  یا کلاس خودمان .

برای قرار گرفتن چنین مقداری به درستی در پایگاه داده شما باید برای Room تعریف کنید که چگونه باید custom type را به primitive type تبدیل کند .

TypeConverter@ چنین کاری را برای ما انجام میدهد .

 

Type Converter

بیایید نگاهی بیندازیم به کلاس مدل Repo که میخواهیم آن را در پایگاه داده قرار دهیم.

@Entity
public class Repo {
    @PrimaryKey
    public int id;
    public String name;
    public Date createdAt;

    public Repo(int id, String name, Date createdAt) {
        this.id = id;
        this.name = name;
        this.createdAt = createdAt;
    }
}

 

در کنار فیلد های id  و name  که primitive type هستند ما فیلد createdAt که از نوع Date می باشد را داریم .

اگر بخواهیم این date یا تاریخ را ذخیره کنیم ما نیاز به ایجاد یک Type Converter یا تبدیل کننده نوع داریم .

public class DateConverter {

    @TypeConverter
    public static Date toDate(long dateLong) {
        return new Date(dateLong);
    }

    @TypeConverter
    public static long fromDate(Date date) {
        return date.getTime();
    }
}

در این کلاس ما دو متد با حاشیه نویسی TypeConverter@ داریم

  • متد ()toDate یک پارامتر از نوع long میگیرد و از نوع Date برمیگرداند .
  • متد ()fromDate که کاری برعکس متد ()toDate را انجام میدهد.

هر متد تبدیل کننده باید یک پارامتر ورودی داشته باشد و مقداری را برگرداند (نمیتواند void باشد) .

برای اینکه مبدل ما کار کند باید این type converter در پایگاه داده ما مشخص شود.

@Database(entities = { Repo.class }, version = 1)
@TypeConverters(DateConverter.class)
public abstract class RepoDatabase extends RoomDatabase {

    ...
}

هم چنین شما می توانید type converter را در مکان های دیگر مشخص کنید .

به عنوان مثال: شما میتوانید converter را در کلاس DAO خود مشخص کنید که در این حالت فقط روی متد های DAO اثرگذار خواهد بود.

نتیجه:

تشکر میکنیم از type converter ها که ما را قادر ساختن تا مقادیر non-primitive (غیر اولیه) را در پایگاه داده ذخیره کنیم.

ما میتوانیم به طور خاص تعریف کنیم که داده های ما چگونه تبدیل شوند , بنابراین  با Room می توان به آسانی داده ها را در پایگاه داده قرار داد.

 

امیدوارم این مطلب برای شما مفید بوده باشد .

 

 
 

کلیدواژه: آموزش برنامه نویسی اندروید آموزش دیتابیس Room Room اندروید Android Architecture Components ذخیره Custom Type در دیتابیس

منابع: android.jlelse.eu

ارسال دیدگاه:
برای ارسال دیگاه باید به سیستم وارد شوید و یا ثبت نام کنید. ثبت نام چند لحظه بیشتر زمان شما را نمیگیرد.