【发布时间】:2021-11-05 11:38:09
【问题描述】:
我在 Room 中使用@TypeConverter 将字符串转换为日期(日期时间)。这是代码
public class DateTimeConverter {
@TypeConverter
public static Date stringToDate(String value) {
DateFormat df = new SimpleDateFormat(Constants.SQLITE_DATE_TIMEFORMAT, Locale.US);
if (value != null) {
try {
return df.parse(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
@TypeConverter
public static String dateToString(Date value) {
DateFormat df = new SimpleDateFormat(Constants.SQLITE_DATE_TIMEFORMAT, Locale.US);
if (value != null) {
return df.format(value);
} else {
return null;
}
}
}
@Entity
@TypeConverters(DateTimeConverter::class)
data class Entity(
var writeDate: Date = Date() // java.util.Date
)
我目前的问题是
-
stringtoDate接收value = null导致Entity.writeDate为空,这是一个运行时异常
问题
- 如何将字符串转换为具有空安全性的日期?表中
writeDate的值永远不会为空,但stringToDate仍会收到value = null。
注意:
- 使用 SDK > 23. 所以不能使用
DateTimeFormatter.ofPattern
【问题讨论】:
-
"表中 writeDate 的值永远不会为空,但 stringToDate 仍然收到 value = null" 那么 this 是问题所在,而不是“如何将字符串转换为日期与零安全”。
-
@Sweeper 是的。这就是问题。但我不知道为什么会这样。我尝试在 Android Studio 中运行 SQL 查询以识别带有 null 的
writeDate,但没有找到任何
标签: kotlin android-room