【问题标题】:How to use calendar type in realm如何在领域中使用日历类型
【发布时间】:2017-08-06 03:25:41
【问题描述】:

我正在创建一个模型,我试图将公历值存储在列中,但它显示错误,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;

错误:(30, 8) 错误:不支持字段“cal”的类型“java.util.Calendar” 我如何存储这个日历值并获取它

【问题讨论】:

  • Realm 不支持对象日历
  • 您可以将其存储为Date
  • 谢谢,我已将其存储为仅日期,并在我的函数中访问时将其转换为日历

标签: java android realm


【解决方案1】:

如果您真的需要存储 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);
    }
}

如何实现方法参考this answerObjectbyte[]serialization/deserialization:

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

【讨论】:

  • 这是我真正想要的,但我已经使用如下方法实现了 toCalendar 函数 public static Calendar toCalendar(Date date){ Calendar cal = new GregorianCalendar(); cal.setTime(日期); Log.e(Constants.TAG, "toCalendar: "+cal);返回校准;这是最好的方式@maciekjanusz
【解决方案2】:

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 中都映射到相同的类型(实际上是 long)。此外,还支持 RealmObject 和 RealmList 的子类来建模关系。

https://realm.io/docs/java/latest/#field-types

【讨论】:

  • 谢谢,是的,我已经尝试过了,但是,我正在尝试存储日历对象,而不仅仅是日期和时间。
【解决方案3】:

使用 calendar.getTime() 中的 Date 代替 Calendar,如有必要,将 Calendar 对象转换器存储到其他类型以进行保存和读取转换。示例:

public static Calendar toCalendarFromDate(Date date){ 
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  return cal;
}

【讨论】:

  • HI Thiago,我已经实现了相同的功能,但无法将时间与日期一起存储,以便我可以将其转换回日历
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多