1

我将使用 ORMLite,因为我发现它非常有用......但是,我发现了一个缺点。

我有一个具有 GregorianCalendar 类型属性的类,其映射如下:

@DatabaseField(dataType = DataType.DATE_STRING)
private GregorianCalendar fechaNacimiento;

当我运行我的应用程序时,它会因 logcat 中的该消息而崩溃:

07-31 20:52:47.629: E/AndroidRuntime(11808): 致命异常: main 07-31 20:52:47.629: E/AndroidRuntime(11808): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com. joninazio.euskofest/com.joninazio.euskofest.ui.MenuPrincipalActivity}:java.lang.IllegalArgumentException:字段类 java.util.GregorianCalendar 字段 FieldType:name=fechaCreacion,class=Usuario 对 com.j256.ormlite 类型无效。 field.types.DateStringType@40dca268,也许应该是类 [B 07-31 20:52:47.629: E/AndroidRuntime(11808): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)

OrmLite 似乎不支持 GregorianCalendar ,因为它可以在这里看到:http ://ormlite.com/data_types.shtml ,其中指出 OrmLite 的 DATE 对应于 Java 的 java.util.Date ...

我的问题是为什么要支持已弃用的课程?

你有什么不改变 GregorianCalendar 的解决方案吗?也许将注释更改为

@DatabaseField(dataType = DataType.STRING)

?

先感谢您。

4

2 回答 2

0

我用一个技巧解决了这个问题:

  • 要持久化的数据更改为 Date 类。更改或创建新的 setter 和 getter。
  • 创建 GregorianCalendar 属性,但该属性不持久(没有注释)。
  • 修改 Date 属性的 setter,分配 GregorianCalendar Date 的转换值。
于 2013-08-01T09:34:07.073 回答
0

Calendar 类实现了 Serializable 接口。GregorianCalendar 扩展日历。

您可以使用以下内容声明您的字段:

@DatabaseField(dataType = DataType.SERIALIZABLE)
private GregorianCalendar fechaNacimiento;
于 2013-11-14T02:51:58.920 回答