我有以下代码-
verifyOtpViewModel.userData.observe(this, Observer {
if (it == null) return@Observer
if (it.profileImage != null) {
...
}
}
profileImage
是我的图片网址。
我需要一种更新的方法,到2020年标准才能从URL获取图像位图,然后从该位图获取URI。
关于这个问题的所有答案都使用了即将被弃用的AsyncTask,我希望有一个更好的解决方案,甚至可能是第3方库。
谢谢!
首先下载图像(如果尚未下载)>
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)