使用 picasso 库从 uri 获取联系人头像时,出现以下错误:
FileNotFoundException content://com.android.contacts/contacts/141/photo
Java 中具有相同 uri 的类似实现可以正常工作。 在 Java 中,我直接使用 imageview 字段加载 uri,但在 jetpack 中我使用 Target。
var image by remember { mutableStateOf<ImageBitmap?>(null) }
val uri = viewModel.getAvatarUri().get(neme)?.get()
var drawable by remember { mutableStateOf<Drawable?>(null) }
DisposableEffect(uri) {
val picasso = Picasso.get()
val target = object : Target {
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
drawable = placeHolderDrawable
}
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {
println(e) //error
drawable = errorDrawable
}
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
image = bitmap?.asImageBitmap()
}
}
picasso
.load(uri)
.placeholder(R.drawable.person)
.into(target)
onDispose {
image = null
drawable = null
picasso.cancelRequest(target)
}
}
Image(
image!!, contentDescription = "Avatar",
modifier = Modifier
.size(48.dp)
.background(Color.Gray, CircleShape)
)
“没有人研究毕加索。如果你想在未来 N 年内得到一些东西,一定要使用 Coil。或者 Glide。或者其他什么。它们都很好。” - 杰克·沃顿