jetpack Compose with Coil 不加载 URL 图像

Mar*_*tin 5 android android-jetpack-compose coil

Jetpack Compose 和 Coil 的新手,但 Android 或 Java/Kotlin 的新手。

我无法显示 URL 中的图像...缺少一些基本内容?

我从( https://developer.android.com/jetpack/compose/tutorial )获取了 Google/Android 教程,并将其添加到 gradle 脚本中:

implementation("io.coil-kt:coil:2.0.0-rc03")
implementation("io.coil-kt:coil-compose:2.0.0-rc03")
Run Code Online (Sandbox Code Playgroud)

我在消息中添加了一个字符串 url:

data class Message(val author: String, val url: String, val body: String)
Run Code Online (Sandbox Code Playgroud)

并将 URL 添加到示例数据中:

Message(
        "Colleague",
        "http://martypants.us/images/person4.png",
        "Searching for alternatives to XML layouts..."
    )
Run Code Online (Sandbox Code Playgroud)

在我的 @Composable 中,我将其更改为使用 AsyncImage 来加载 URL,而不是可绘制的

@Composable
fun MessageCard(msg: Message) {
    Row {
     AsyncImage(
        model = ImageRequest.Builder(LocalContext.current)
            .data(msg.url)
            .build(),
        placeholder = painterResource(R.drawable.ic_profile),
        error = painterResource(R.drawable.ic_error),
        contentDescription = stringResource(R.string.description),
        contentScale = ContentScale.Fit,
        modifier = Modifier
            // Set image size to 40 dp
            .size(40.dp)
            .width(48.dp)
            .height(48.dp)
            // Clip image to be shaped as a circle
            .clip(CircleShape)
            .align(Alignment.CenterVertically)
            .border(1.5.dp, MaterialTheme.colors.secondary, CircleShape)
    )

}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它不会加载图像。我验证了图像存在、可读等。我只看到错误占位符,在 Logcat 中从未看到任何错误。

许多其他教程都显示了类似的用法,但似乎无法弄清楚为什么我的图像未加载。我缺少什么?

Mar*_*tin 3

好吧,这是一个菜鸟错误……有点……我一直在运行 Android 12 的 Pixel4a 上进行测试 - 没有图像,但完全没有错误。但后来我出去理清思绪,只带了我的笔记本电脑并使用了模拟器。运行 Android 11 的 Pixel2 模拟器,应用程序崩溃了,很明显我做错了什么。

致命异常:OkHttp 调度程序进程:com.example.jetpackcomposetest,PID:19029 java.lang.SecurityException:权限被拒绝(缺少 INTERNET 权限?)

现在我很好奇为什么我的 Pixel4a 从来没有抱怨权限也没有崩溃......并且从未从 Okhttp 得到致命异常