最初,我是在卡片视图中添加信息(字符串)和照片(来自可绘制对象)。我有一个列表,使用适配器等将其添加到回收器视图中的卡中。现在,我尝试迁移到使用Room Persistence库保存此信息,而不是在代码中添加虚拟信息,而是让它来自用户输入,因为我尝试实现这一点,所以我发现保存图像到Room DB不太容易。字符串工作正常,现在我只需要一种方法即可保存从相机拍摄的图像。
我无法使用“图像”,“位图”,“ URI”,“可绘制对象”类型将图像存储在Room DB中。
@Entity(tableName = "machines_table")
public class Machines {
@PrimaryKey(autoGenerate = true)
private int id;
private Drawable photoId;
private String name;
private String location;
public Machines(String name, String location, Drawable photoId) {
this.name = name;
this.location = location;
this.photoId = photoId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public String getLocation() {
return location;
}
public Drawable getPhotoId() {
return photoId;
}
}
我想我希望能够更轻松地保存图像,但是当使用上面列出的任何一种类型时,情况并非如此。
“错误:无法弄清楚如何将该字段保存到数据库中。您可以考虑为其添加类型转换器。”
答案 0 :(得分:3)
您可能可以将它们另存为byte[]
,但是将位图保存到数据库通常被认为是不明智的。将它们存储到文件系统,并将文件名(例如,基于UUID的文件名)保存到DB。然后在需要时检索文件。
如果数据库本身存储图像,它将变得庞大而缓慢。
答案 1 :(得分:0)
您不能存储纯图像,有很多选项可以存储图像: