تكرار السؤال: …
الإجابة المختصرة
بتعريف دوال تحمل وسم @TypeConverter لتحويل النوع المخصص إلى نوع بدائي تفهمه SQLite (كالنص أو الرقم) وعكسه عند القراءة.
الشرح
تدعم SQLite أنواعًا محدودة (NULL, INTEGER, REAL, TEXT, BLOB). إذا كان لديك حقل من نوع Date أو List<String> في الـ Entity، تقوم بإنشاء كلاس وسيط يحول التاريخ إلى Long (Timestamp) وبالعكس، أو يحول القائمة إلى نص JSON، ثم تسجل الكلاس في الـ Database عبر @TypeConverters.
مثال بالكود
class Converters {
@TypeConverter
fun fromTimestamp(value: Long?): Date? = value?.let { Date(it) }
@TypeConverter
fun dateToTimestamp(date: Date?): Long? = date?.time
}
@Database(entities = [Note::class], version = 1)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase()أخطاء شائعة
- استخدام TypeConverter لتحويل كائنات كاملة مرتبطة بعلاقات One-to-Many بدلاً من إنشاء جداول وعلاقات أصلية في قاعدة البيانات.