如何将图像从URL保存到本地并获得Uri?

问题描述 投票:0回答:1

我有以下代码-

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

profileImage是我的图片网址。

我需要一种更新的方法,到2020年标准才能从URL获取图像位图,然后从该位图获取URI。

关于这个问题的所有答案都使用了即将被弃用的AsyncTask,我希望有一个更好的解决方案,甚至可能是第3方库。

谢谢!

android image uri android-bitmap
1个回答
0
投票

首先下载图像(如果尚未下载)>

GlideApp是生成的API,如果不确定我要做什么,请改用Glide。

diskCacheStrategy(DiskCacheStrategy.NONE)不要让Glide缓存此图像。从网址下载图像时,Target.Size_Original保持原始大小。

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)
© www.soinside.com 2019 - 2024. All rights reserved.