gpt4 book ai didi

java - 为什么我的 ORMLite 自定义持久化器不能在 Android 上运行?

转载 作者:行者123 更新时间:2023-11-30 11:16:00 25 4
gpt4 key购买 nike

我为来自 Joda Time 的 LocalTime 类编写了一个自定义持久化器:

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 字段的对象并将其添加到数据库时,出现以下异常:

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() 返回一个 LocalTime.PropertygetMillisOfDay() 返回一个 int

关于java - 为什么我的 ORMLite 自定义持久化器不能在 Android 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com