2013-07-31 69 views
1

我打算使用ORMLite,因爲我發現它非常有用......但是,我發現了一個缺點。ORMLite不支持GregorianCalendar映射

我有有一個GregorianCalendar類屬性,它如下映射類:

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

當我運行我的應用程序,它就會與該消息墜毀在logcat中:

07 -31 20:52:47.629:E/AndroidRuntime(11808):致命異常:主 07-31 20:52:47.629:E/AndroidRuntime(11808):java.lang.RuntimeException:無法啓動活動ComponentInfo {com。 joninazio.euskofest/com.joninazio.euskofest.ui.MenuPrincipalActivity}:java.lang.IllegalArgumentException:Field c lass java.util.GregorianCalendar for field FieldType:name = fechaCreacion,class = Usuario對[email protected]類型無效,也許應該是class [B 07-31 20:52: 47.629:E/AndroidRuntime(11808):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)

似乎GregorianCalendar的不OrmLite支持的,因爲它可以在這裏看到:http://ormlite.com/data_types.shtml,其中規定OrmLite的日期對應Java的java.util.Date ...

而我的問題是爲什麼支持一個不推薦的類?

您有任何解決方案不要更改GregorianCalendar?也許將註釋更改爲

@DatabaseField(dataType = DataType.STRING) 

預先感謝您。

回答

0

我有一招解決了這個:

  • 的數據被保留的改變Date類。更改或創建新的設置者和獲取者。
  • 創建GregorianCalendar屬性,但該屬性不會保留(不帶註釋)。
  • 修改Date屬性的setter,指定轉換的GregorianCalendar Date的值。
0

Calendar類實現Serializable接口。 GregorianCalendar擴展日曆。

您可以用下面的聲明你的領域:

@DatabaseField(dataType = DataType.SERIALIZABLE) 
private GregorianCalendar fechaNacimiento; 
+0

這是一個古老的答案,但我還是想補充這一點:使用'DataType.SERIALIZABLE'是確定持久化數據。但是你無法對你的領域進行比較(例如選擇一個給定日期的記錄) – mithrop

相關問題