LocalTime
Joda Time 에서 클래스에 대한 사용자 지정 지속 기를 작성했습니다 .
public class LocalTimePersister extends BaseDataType {
private static final LocalTimePersister instance = new LocalTimePersister();
private LocalTimePersister() {
super(SqlType.LONG, new Class<?>[] { LocalTime.class });
}
public static LocalTimePersister getSingleton() {
return instance;
}
@Override
public Object javaToSqlArg(FieldType fieldType, Object javaObject) {
if (javaObject == null) {
return null;
} else {
return ((LocalTime) javaObject).millisOfDay();
}
}
@Override
public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos) throws SQLException {
return results.getLong(columnPos);
}
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr) throws SQLException {
return Long.parseLong(defaultStr);
}
@Override
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException {
Long millis = (Long)sqlArg;
if (millis == null) {
return null;
} else {
return LocalTime.fromMillisOfDay(millis);
}
}
}
LocalTime
멤버 가있는 클래스 는 다음과 같이 선언했습니다.
@DatabaseField(canBeNull = false, persisterClass = LocalTimePersister.class)
private LocalTime time;
그리고 내 데이터베이스 구성 파일을 다시 생성했습니다.
# --field-start--
fieldName=time
canBeNull=false
persisterClass=com.myapp.db.persisters.LocalTimePersister
# --field-end--
LocalTime
필드 가있는 개체를 만들고 DB에 추가하려고하면 다음 예외가 발생합니다.
java.lang.ClassCastException: org.joda.time.LocalTime$Property cannot be cast to java.lang.Number
at com.j256.ormlite.android.AndroidDatabaseConnection.bindArgs(AndroidDatabaseConnection.java:345)
at com.j256.ormlite.android.AndroidDatabaseConnection.insert(AndroidDatabaseConnection.java:156)
at com.j256.ormlite.stmt.mapped.MappedCreate.insert(MappedCreate.java:91)
at com.j256.ormlite.stmt.StatementExecutor.create(StatementExecutor.java:450)
at com.j256.ormlite.dao.BaseDaoImpl.create(BaseDaoImpl.java:310)
at com.myapp.db.DBHandler.populateDB(DBHandler.java:178)
오 이런, 난 바보 야. 대답은 예외에 바로 숨겨져있었습니다.
org.joda.time.LocalTime$Property cannot be cast to java.lang.Number
javaToSqlArg
내가 반환 하는 방법에서
((LocalTime) javaObject).millisOfDay()
내가 돌아올 때
((LocalTime) javaObject).getMillisOfDay()
millisOfDay()
A는 반환 LocalTime.Property
, getMillisOfDay()
반환합니다 int
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다