Как хранить изображения в локальном хранилище и хранить путь в комнате?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как хранить изображения в локальном хранилище и хранить путь в комнате?

Сообщение Anonymous »

Я новичок в разработке Kotlin Jetpack Compose для Android и пытаюсь создать приложение, которое позволяет делать заметки, а также хранить изображения вместе с заметками в базе данных комнат. Проблема в том, что когда я использую следующий инструмент выбора для выбора изображений из галереи, они отображаются, пока приложение работает, но как только вы закрываете и перезапускаете приложение, изображения больше не загружаются.
Однако их URI содержимого хранится в базе данных. Изначально я хранил только Uris средства выбора контента, который выглядел так:

Код: Выделить всё

content://media/picker/0/com.android.providers.media.photopicker/media/1001290474
Класс данных для заметки в базе данных помещения

Код: Выделить всё

@Entity(tableName = "notes_tbl")
data class Note(
@PrimaryKey
val id: UUID = UUID.randomUUID(),
@ColumnInfo(name = "note_title")
var title: String,
@ColumnInfo(name = "note_body")
var desc: String,
@ColumnInfo(name = "note_images")
var images: List = emptyList()
)
Выбор нескольких фотографий

Код: Выделить всё

val multiplePhotoPicker = rememberLauncherForActivityResult(
contract = ActivityResultContracts.PickMultipleVisualMedia(),
onResult = {
uris -> uriList.value = uris
}
)
Функция добавления заметок (список заметок содержит список заметок, полученных из комнаты)

Код: Выделить всё

fun getNote(id: String): Note {
return notesList.value.first { note -> note.id.toString() == id }
}
Я также пытался записать в хранилище выбранные изображения, используя код, который нашел здесь

Код: Выделить всё

val saveImageToInternalStorage: (Context, Uri) -> String = {
context: Context, uri: Uri ->
val fileName = UUID.randomUUID().toString()+".jpg"
val inputStream = context.contentResolver.openInputStream(uri)
val outputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE)
inputStream.use {
input ->
outputStream.use {
output ->
input?.copyTo(output)
}
}
fileName
}
Они есть в базе данных, но я почему-то не могу их отобразить. Я не знаю, что делать. Пожалуйста, не обращайте внимания на какой-либо странный код, поскольку я пробовал различные методы, найденные в Интернете, но ни один из них не помог.

Подробнее здесь: https://stackoverflow.com/questions/783 ... th-in-room
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»