Как сохранить изображение с URL на локальный и получить его Uri? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть следующий код -

 verifyOtpViewModel.userData.observe(this, Observer {
            if (it == null) return@Observer
            if (it.profileImage != null) {
                ...
            }
}

profileImage - это URL моего изображения.

Мне нужен обновленный способ, по стандарту 2020, чтобы получить растровое изображение с URL-адреса, а затем получить URI из этого растрового изображения.

Во всех ответах на эту тему используется устаревшая версия AsyncTask, и я надеялся на лучшее решение, возможно даже на стороннюю библиотеку.

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2020

Сначала загрузите изображение, если оно еще не загружено

GlideApp - это созданный API:

Добавьте класс с точно таким же именем. Обязательно восстановите после добавления этого фрагмента кода:

вам нужно использовать kapt вместо annotactionProccesser на Kotlin.

@GlideModule
class MyAppGlideModule : AppGlideModule()

diskCacheStrategy(DiskCacheStrategy.NONE) не позволяйте Glide кэшировать это изображение. Target.Size_Original сохранить исходный размер при загрузке изображения с URL.

GlideApp
            .with(context)
            .asBitmap()
            .load(uri)
            .diskCacheStrategy(DiskCacheStrategy.NONE)
            .into(object : CustomTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) {
                override fun onLoadCleared(placeholder: Drawable?) {}
                override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                       //Save image file
                       saveFile(resource)
                       //Load into imageview if needed
                    }
                }
            })

Сохранить файл изображения. Для этого рекомендуется использовать фоновые потоки.

val randomFilename = //generate a name based on your preferences
val file = File(saveDirectory, randomFilename)
val fos = FileOutputStream(file)
val bos = BufferedOutputStream(fos)
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos)
bos.close()

Обновите базу данных вашей комнаты, указав имя файла, чтобы получить его позже.

@Query("UPDATE table_name SET image_filename = :fileName WHERE id = :id ")
fun updateImageFilename(id: Int, filename: String)
...