Я хочу сохранить небольшие изображения в базе данных моей комнаты, и у меня есть две проблемы:

  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

1
rot8 7 Окт 2020 в 17:01

1 ответ

Лучший ответ

Очень простой способ получить изображения в базе данных (хотя я лично не рекомендую это делать) - это кодировать растровые изображения в виде строки base-64 и помещать ее в строку базы данных.

Учтите, что растровые изображения занимают очень много памяти; и кодирование base64 что-то увеличивает его размер еще больше, поэтому будьте осторожны при загрузке кучи изображений ... Я также думаю, что Room и SQLite поддерживают двоичные данные как капли, поэтому вы можете просто объявить столбец как ByteArray, и он должен просто работать.

Что я делал в своих проектах, так это записывал их во внутреннее или внешнее хранилище моего приложения, а затем сохранял ссылку Uri как String, чтобы впоследствии иметь возможность получить изображение с диска.

Еще больше я отговариваю вставлять более одного значения в строку; наличие списка вещей внутри coulmn в SQL определенно не является шаблоном, которому вы должны следовать. Создание «объединенной» таблицы должно быть достаточно простым или просто дополнительный столбец, который вы могли бы использовать для их группировки, должен быть достаточно простым, не так ли?

1
Some random IT boy 7 Окт 2020 в 14:05