تهیه پیش‌فروش دوره «آموزش تکمیلی و پروژه محور Spring Boot» با ۳۵% تخفیف - فقط تا ۱۳ شهریور 

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

دیدگاه ها:
امید
۲ هفته قبل
reply
سلام - ممنون از مطالب خوبتون - میشه تمام این مباحث رو در قالب یک پروژه بیان کنید
امیرحسین عبدالله زاده
۲ هفته قبل در پاسخ به امید
reply
سلام،‌ بنده قصد ضبط آموزش Room رو دارم. یک پیش‌نیاز هم براش آماده کردم تحت عنوان دوره آموزش دیتابیس SQLite در اندروید با کاتلین که اخیرا در وبسایت به صورت رایگان منتشر کردیم که ساختار و معماری رو به شکلی پیش بردم در آموزش که ذهنتون برای کار با Room آماده بشه. لینک دوره:

https://arcademy.ir/+c302
امید
۲ هفته قبل
reply
این دوره هم با کاتلینه ؟ نمیشه با جاوا آموزش بدید ؟
امیرحسین عبدالله زاده
۲ هفته قبل در پاسخ به امید
reply
با توجه به اینکه اکثر برنامه‌نویسان اندروید به کاتلین سوئیچ کردند ما هم دیدیم خیلی بهتره که به روز باشیم و آموزشهای جدیدمون رو با کاتلین آموزش بدیم. کسی که به جاوا تسلط داره سوئیچ کردن به کاتلین در اندروید شاید براش 1 هفته هم طول نکشه و کار بسیار راحتیه.
ارسال دیدگاه:
برای ارسال دیگاه باید به سیستم وارد شوید و یا ثبت نام کنید. ثبت نام چند لحظه بیشتر زمان شما را نمیگیرد.