Search code examples
javaandroidrealm

How to use calendar type in realm


I am creating a model where i'm trying to store gregorian calendar value in a column, but its showing me error, Calendar Datatype not supported by realmProxcy.

private String alarmName;
private Boolean alarmActive = true;
private Date alarmTime;
private String alarmTonePath = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM).toString();
private Boolean alarmVibrate = true;
private  Calendar cal;

@PrimaryKey public int alarmid;

Error:(30, 8) error: Type 'java.util.Calendar' of field 'cal' is not supported how can i store this calendar value and fetch it


Solution

  • If you really need to store a Calendar instance, you can take advantage of it being a Serializable and the possibility of storing byte[] arrays in Realm objects - serialize your Calendar to byte array for storage and deserialize from byte array when accessing data.

    Your object would look like this:

    class MyRealmObject extends RealmObject {
        private String alarmName;
        private Boolean alarmActive = true;
        private Date alarmTime;
        private String alarmTonePath = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM).toString();
        private Boolean alarmVibrate = true;
        private byte[] serializedCalendar;
    
        public Calendar getCalendar() {
            return deserializeCalendar(serializedCalendar);
        }
    
        public void setCalendar(Calendar calendar) {
            this.serializedCalendar = serializeCalendar(calendar);
        }
    }
    

    Refer to this answer on Object<>byte[]serialization/deserialization on how to implement methods:

    byte[] serializeCalendar(Calendar c);
    Calendar deserializeCalendar(byte[] arr);