البرمجة

Enums with Realm: Workaround for Android

للأسف، يبدو أن Realm لا يدعم مباشرة تخزين ال Enums كقيم للحقول. ولكن يمكنك تحقيق هذا من خلال تخزين قيمة ال Enum ك Integer أو String، ثم تحويلها ل Enum عند الحاجة.

لنفترض أن لديك Enum بالاسم ShuttleTypes كما هو موضح في السؤال، يمكنك تخزين قيمه ك Integer. على سبيل المثال، يمكنك تحديث كلاس ShuttleOption ليبدو كما يلي:

java
public class ShuttleOption extends RealmObject { private int Id; private String Label; private int OriginShuttleType; public ShuttleTypes getOriginShuttleType() { return ShuttleTypes.fromInt(OriginShuttleType); } public void setOriginShuttleType(ShuttleTypes shuttleType) { this.OriginShuttleType = shuttleType.getValue(); } }

ثم، يمكنك إنشاء Enum ShuttleTypes كالتالي:

java
public enum ShuttleTypes { HOME(1), WORK(2); private final int value; ShuttleTypes(int value) { this.value = value; } public int getValue() { return value; } public static ShuttleTypes fromInt(int value) { for (ShuttleTypes type : ShuttleTypes.values()) { if (type.getValue() == value) { return type; } } throw new IllegalArgumentException("Invalid ShuttleTypes value: " + value); } }

وبهذا يمكنك استخدام ال Enums بشكل فعال مع Realm عن طريق تخزين القيمة ك Integer وتحويلها لل Enum عند الحاجة.

المزيد من المعلومات

للأسف، يبدو أن Realm لا يدعم مباشرة تخزين ال Enums كقيم للحقول. ولكن يمكنك تحقيق هذا من خلال تخزين قيمة ال Enum ك Integer أو String، ثم تحويلها ل Enum عند الحاجة.

لنفترض أن لديك Enum بالاسم ShuttleTypes كما هو موضح في السؤال، يمكنك تخزين قيمه ك Integer. على سبيل المثال، يمكنك تحديث كلاس ShuttleOption ليبدو كما يلي:

java
public class ShuttleOption extends RealmObject { private int Id; private String Label; private int OriginShuttleType; public ShuttleTypes getOriginShuttleType() { return ShuttleTypes.fromInt(OriginShuttleType); } public void setOriginShuttleType(ShuttleTypes shuttleType) { this.OriginShuttleType = shuttleType.getValue(); } }

ثم، يمكنك إنشاء Enum ShuttleTypes كالتالي:

java
public enum ShuttleTypes { HOME(1), WORK(2); private final int value; ShuttleTypes(int value) { this.value = value; } public int getValue() { return value; } public static ShuttleTypes fromInt(int value) { for (ShuttleTypes type : ShuttleTypes.values()) { if (type.getValue() == value) { return type; } } throw new IllegalArgumentException("Invalid ShuttleTypes value: " + value); } }

وبهذا يمكنك استخدام ال Enums بشكل فعال مع Realm عن طريق تخزين القيمة ك Integer وتحويلها لل Enum عند الحاجة.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر