【问题标题】:Save Class Variable in Room Library在房间库中保存类变量
【发布时间】:2021-05-12 06:29:55
【问题描述】:
大家好,我想在数据库中保存一个类变量,但我收到此错误:
error: Cannot figure out how to save this field into database. You can consider adding a type
converter for it.
这是我的桌子:
@Entity(tableName = "tbl_projects")
public class Room_Database_Project {
@PrimaryKey(autoGenerate = true)
private int id;
private Project project;
项目变量不能...
我该怎么办?
【问题讨论】:
标签:
java
android
database
android-room
【解决方案1】:
您可以使用两种方法来做到这一点。看看哪种更适合您的情况。
TypeConverter:定义类型转换器后,您可以在实体和 DAO 中使用自定义类型,就像使用原始类型一样
例子:
public static class Converters {
@TypeConverter
public Date fromTimestamp(Long value) {
return value == null ? null : new Date(value);
}
@TypeConverter
public Long dateToTimestamp(Date date) {
if (date == null) {
return null;
} else {
return date.getTime();
}
}
@TypeConverter
public Project fromString(String value) {
return new Gson().fromJson(value, Project.class);
}
@TypeConverter
public String fromProject(Project project) {
return new Gson().toJson(project);
}
}
然后你可以在你的抽象 RoomDatabase 类上添加@TypeConverters(Converters.class) 注解。
Embedded:这个注解表示被嵌入的类的实例被存储为使用该注解的类的固有部分。
例子:
public class Project {
double projectLatitude;
double ProjectLongitude;
String projectName;
}
@Entity(tableName = "tbl_projects")
public class Room_Database_Project {
@PrimaryKey(autoGenerate = true)
private int id;
@Embedded
private Project project;
}
https://developer.android.com/training/data-storage/room/referencing-data