当前位置: 首页 > 面试题库 >

Android Room-错误:无法弄清楚如何将该字段保存到数据库中

邵凯定
2023-03-14
问题内容

详细日志

error: Cannot figure out how to save this field into database. You can 
consider adding a type converter for it.
private final java.util.Date mTime = null;

我有一个实体,其字段为

var mStartTime : Date = Date() // java.util.Date

为什么房间不能保留日期对象?什么是Date的最佳转换器?


问题答案:

Date正是https://developer.android.com/training/data-storage/room/referencing-
data中
给出的示例。

例如,如果要保留Date的实例,可以编写以下TypeConverter来将等效的Unix时间戳存储在数据库中:

public class Converters {
    @TypeConverter
    public static Date fromTimestamp(Long value) {
        return value == null ? null : new Date(value);
    }
    @TypeConverter
    public static Long dateToTimestamp(Date date) {
        return date == null ? null : date.getTime();
    }
}

前面的示例定义了2个函数,一个将Date对象转换为Long对象,另一个执行从Long到Date的逆转换。由于Room已经知道如何保留Long对象,因此可以使用此转换器保留Date类型的值。

接下来,将@TypeConverters批注添加到AppDatabase类,以便Room可以使用为该AppDatabase中的每个实体和DAO定义的转换器:

AppDatabase.java

@Database(entities = {User.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

旁注:java.util.Date被认为设计不当(而且java.util.Calendar更糟)。如果您有任何不重要的日期时间逻辑,并且可以摆脱API级别26(台式机上的Java
8),通常最好使用java.timepackage。如果无法这样做,请参阅https://github.com/JakeWharton/ThreeTenABP以获取反向移植。



 类似资料:
  • 问题内容: 试图获得公司名单,但这给了我一个错误。 例外: 我的文件包含: 当我要添加新的工作订单时,select中应该有可用的公司列表。 更新: 这是我的方法 : 问题答案: JSP包含操作返回的选择标记。添加订单时,它应该具有绑定到bean属性的属性。它应该是值堆栈中的一个对象。 在大多数情况下,最好在操作类中初始化该属性,以更好地实现必须编写方法和初始化列表的位置。 因为标签的属性不能为引发

  • 问题内容: 我需要打印以下代码: 像这样水平打印而不是垂直打印: 至 我不确定该如何做,会有一些帮助。谢谢 问题答案: 两种选择: 累加一个结果字符串,最后是: 或者告诉Python不要用换行符结束打印的字符串。在您似乎正在使用的Python 3中,您可以通过设置函数的参数(默认情况下为(换行符))来实现此目的: 历史记录:在Python 2中,可以通过在语句末尾添加逗号来实现。

  • 当我想将我的JSON记录到房间数据库中时,我遇到了一个问题。 我的数据类是: )

  • 我要用作的数据类如下: My details对象是一个名为的自定义类的列表,其中包含: 此列表中只有一项。正如上面的数据类中提到的,我还为实体中的特定字段指定了一个TypeConzer类。其定义如下: 为了完成我的问题,下面是我的实现: 采用这种方法,我在构建应用程序时会出现以下错误: 甚至我也怀疑出了问题,因为我的IDE没有显示任何地方都可以使用的中的函数。像这样: 我知道很多人过去也在Stac

  • 我需要你的帮助。我试图在没有反序列化的情况下找到解决方案,但我什么也没找到。如果你能帮我就好了...所以我有了下面的JSON文件 谢谢你的时间和帮助。 我有以下错误: