1

我想在我的房间数据库中保存小图像,我有两个问题:

  1. 如何将图像保存在我的数据库中?
  2. 如何在我的数据库中保存多个图像?

我尝试以开发人员页面推荐的方式保存位图(https://developer.android.com/training/data-storage/room/defining-data

@Parcelize
@Entity(tableName = "image_table")
data class ImgMod(

    @PrimaryKey(autoGenerate = true)
    var invoiceId: Long = 0L,

    @ColumnInfo(name = "image")
    var single_img: Bitmap?
): Parcelable

但是,我收到以下错误:

Cannot figure out how to save this field into database. You can consider adding a type converter for it.

其次,我想在一个数据库条目中保存多个图像。但是我收到以下代码段的相同错误:

    @ColumnInfo(name = "imageList")
    var img_list: ArrayList<BitMap>

或将位图解码为字符串

    @ColumnInfo(name = "imageList")
    var decoded_img_list: ArrayList<String>

如果这是一个非常基本的问题,我很抱歉。但是我该如何配置数据库/处理数据到图像列表?

提前谢谢你,rot8

4

1 回答 1

2

将图像放入数据库的一种非常简单的方法(尽管我个人不鼓励这样做)是将位图 base-64 编码为字符串并将其放入数据库的一行中。

考虑到位图占用大量内存;和base64编码的东西会增加它的大小,所以在加载一堆图像时要小心......我也认为Room和SQLite支持二进制数据作为blob,所以你可以只声明一个列ByteArray,它应该可以工作。

我在我的项目中一直在做的是将它们写入我的应用程序的内部或外部存储,然后将引用存储UriString以后能够从磁盘检索图像。

我更不鼓励的是每行填充一个以上的值;在 SQL 的列中包含内容列表绝对不是您应该遵循的模式。创建“连接”表应该足够简单,或者只是一个可以用来对它们进行分组的额外列应该很容易,对吧?

于 2020-10-07T14:05:55.623 回答