如何将图像保存到 Room Persistence Library
How to save images to Room Persistence Library
最初我是在卡片视图中添加信息(字符串)和照片(来自可绘制对象)。我让它从列表中工作,并使用适配器等将它添加到回收器视图中的卡片中。现在我正在尝试迁移到使用 Room Persistence Library 来保存此信息,而不是在代码中添加虚拟信息,我打算让它来自用户输入,因为我正在尝试实现这一点,我发现保存图像去Room DB也不是太容易。现在字符串工作正常我只需要一种方法来保存从相机拍摄的图像。
我无法使用 Image、Bitmap、URI、Drawable 类型将图像存储在 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;
}
}
我想我希望能够更轻松地保存图像,但是当使用上面列出的任何类型时情况并非如此,我收到此错误。
"error: Cannot figure out how to save this field into database. You can consider adding a type converter for it."
您可能可以将它们保存为 byte[]
,但是通常认为将位图保存到数据库中是不明智的。将它们存储到文件系统并将文件名(例如基于 UUID 的文件名)保存到数据库。然后在需要时检索文件。
如果数据库本身存储图像,将会变得庞大而缓慢。
你不能存储纯图像,有很多存储图像的选项:
- 将图像转换为 base64 并存储在数据库中
- 保存在本地存储并将Uri存储在数据库中
- 从服务器获取图像 URL 并在数据库中存储 URL
最初我是在卡片视图中添加信息(字符串)和照片(来自可绘制对象)。我让它从列表中工作,并使用适配器等将它添加到回收器视图中的卡片中。现在我正在尝试迁移到使用 Room Persistence Library 来保存此信息,而不是在代码中添加虚拟信息,我打算让它来自用户输入,因为我正在尝试实现这一点,我发现保存图像去Room DB也不是太容易。现在字符串工作正常我只需要一种方法来保存从相机拍摄的图像。
我无法使用 Image、Bitmap、URI、Drawable 类型将图像存储在 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;
}
}
我想我希望能够更轻松地保存图像,但是当使用上面列出的任何类型时情况并非如此,我收到此错误。
"error: Cannot figure out how to save this field into database. You can consider adding a type converter for it."
您可能可以将它们保存为 byte[]
,但是通常认为将位图保存到数据库中是不明智的。将它们存储到文件系统并将文件名(例如基于 UUID 的文件名)保存到数据库。然后在需要时检索文件。
如果数据库本身存储图像,将会变得庞大而缓慢。
你不能存储纯图像,有很多存储图像的选项:
- 将图像转换为 base64 并存储在数据库中
- 保存在本地存储并将Uri存储在数据库中
- 从服务器获取图像 URL 并在数据库中存储 URL