【发布时间】:2021-12-19 12:42:36
【问题描述】:
我将 uri 保存为 Room 数据库中的字符串,然后应用程序正在检索数据并在 LazyVerticalGrid 中显示所有图像。当我添加图像时,一切正常,所有图像都正确显示。问题是当我重新启动应用程序时。所有图像都消失了,当我添加完全相同的图像(具有相同的 uri)时 - 它出现在第一个位置,但也出现在我重新启动应用程序之前的所有位置。当我检查日志时,所有 uri 也从数据库中正确检索为格式:
content://com.android.providers.media.documents/document/image%3A9371
这是图像显示的代码(使用线圈):
@Composable
fun ProfilePhotoView(photo: String, navController: NavHostController) {
Image(
painter = rememberImagePainter(photo),
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = Modifier
.aspectRatio(1f)
.padding(3.dp)
.clip(RoundedCornerShape(10.dp))
.clickable {},
alignment = Alignment.Center
)
Log.i(TAG,"photo string = ${photo}")
}
这是我在添加到数据库之前检索 uri 的方法:
val selectImagelauncher = rememberLauncherForActivityResult(
contract =
ActivityResultContracts.GetContent()
) { uri: Uri? ->
imageUriState = uri
}
selectImagelauncher.launch("image/*")
你知道为什么在将相同的图像添加到数据库之前我不能显示带有“旧”uri 的图像吗?
【问题讨论】:
-
%3A 是一个编码字符,你确定你解码正确吗?
-
我相信我会这样做,因为在我重新启动应用程序之前,每个图像都会正确显示
-
另外,当我从图库而不是文档中检索数据时,格式为:content://media/external/images/media/9323 并且没有任何变化
-
在存储之前它可能没有被编码。您是否调试以检查原始 URI?
标签: android kotlin android-room android-jetpack-compose