我正在创建一个模型,我试图将gregorian日历值存储在一列中,但它显示我的错误,realmProxcy不支持Calendar Datatype。
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;
错误:(30,8)错误:不支持字段'cal'的'java.util.Calendar' 我如何存储此日历值并获取它
答案 0 :(得分:0)
Realm数据库仅支持Date
类。您必须将Calendar
实例评估为Date
个实例。
Calendar cal = Calendar.getInstance();
Date date = cal.getTime(); //save it to realm
来自Realm文档:
Realm支持以下字段类型:boolean,byte,short,int,long,float,double,String, Date 和byte []。整数类型byte,short,int和long都映射到Realm中的相同类型(实际上很长)。此外,支持RealmObject和RealmList的子类来建模关系。
答案 1 :(得分:0)
使用Date from calendar.getTime()代替Calendar,如果需要,将Calendar对象转换器存储到其他类型进行保存和读取转换。例如:
public static Calendar toCalendarFromDate(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal;
}
答案 2 :(得分:0)
如果确实需要存储Calendar
实例,您可以利用它Serializable
并在Realm中存储byte[]
数组的可能性对象 - 序列化您的Calendar
到字节数组进行存储,并在访问数据时从字节数组反序列化。
你的对象看起来像这样:
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);
}
}
关于如何实施方法,请参阅Object
<> byte[]
序列化/反序列化的this answer:
byte[] serializeCalendar(Calendar c);
Calendar deserializeCalendar(byte[] arr);