آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

TypeConverter در دیتابیس Room

چهارشنبه, ۴ فروردين ۱۴۰۰، ۱۰:۵۴ ب.ظ

در دیتابیس روم فقط primitive data type ها ذخیره میشن. بنابراین باید پراپرتی های entity رو به نحوی به primitive data type تبدیل کنیم تا بتونیم توی دیتابیس ذخیره کنیم. توسط TypeConverter میشه این کارو انجام داد.

مثلا در اپ ToDo فیلد priority از نوع enum تعریف شده و باید متدهایی نوشته بشه که اون رو به رشته تبدیل کنه و توی دیتابیس ذخیره کنه و همچنین متدی نوشته بشه که رشته خونده شده از دیتابیس رو به enum تبدیل کنه.

یک کلاس به صورت زیر تعریف میشه و انوتیشن TypeConverter بالای متدهای اون نشون میده که برای تبدیل استفاده میشه.

class Converter {

    @TypeConverter
    fun fromPriority(priority: Priority) : String{
        return priority.name
    }


    @TypeConverter
    fun toPriority(priority: String) : Priority{
        return Priority.valueOf(priority)
    }
}

 

enum class Priority {
    HIGH,
    MEDIUM,
    LOW
}

 

توی کلاس ابسترکت دیتابیس به صورت زیر این کلاس معرفی میشه: (هایلایت شده)

@Database(entities = [ToDo::class], version = 1,exportSchema = false)
@TypeConverters(Converter::class)
abstract class ToDoDatabase : RoomDatabase(){

    abstract fun todoDao() : ToDoDAO

    companion object{
        @Volatile
        private var INSTANCE : ToDoDatabase? = null

        fun getDatabaseInstance(context: Context) : ToDoDatabase{
            if(INSTANCE != null)
                return INSTANCE!!

            synchronized(this){
                INSTANCE = Room
                    .databaseBuilder(
                        context.applicationContext,
                        ToDoDatabase::class.java,
                        "todo_database"
                    )
                    .build()
                return INSTANCE!!
            }
        }
    }
}
موافقین ۰ مخالفین ۰ ۰۰/۰۱/۰۴
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی