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!!
}
}
}
}
۰۰/۰۱/۰۴