Jetpack compose 中联系人的 Picasso FileNotFoundException 图像

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

使用 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)
)
image android-jetpack-compose uri drawable picasso
1个回答
0
投票

“没有人研究毕加索。如果你想在未来 N 年内得到一些东西,一定要使用 Coil。或者 Glide。或者其他什么。它们都很好。” - 杰克·沃顿

https://github.com/square/picasso/issues/2203

© www.soinside.com 2019 - 2024. All rights reserved.