【问题标题】:Detect when image not found using Compose Coil使用 Compose Coil 检测何时找不到图像
【发布时间】:2021-12-02 06:37:40
【问题描述】:

我在 jetpack compose 中使用线圈填充我的图像,我面临的问题是我无法以编程方式识别 url 是否不再有效。

val imageUrl = "www.someinvalidurl.com"
val painter = rememberImagePainter(
    data = imageUrl
)

Image(
    painter = painter
)

该网址以前有效,但不再有效。线圈显示默认占位符 url,但我想识别此失败并尝试从不同的 url 获取图像。这个我试过了,

if (painter.state is ImagePainter.State.Error) {
    //failed so try to get an image from a different url
}

但是这样做的问题是,即使是有效的 url,也会调用这个块。

我正在使用以下版本的线圈:

implementation("io.coil-kt:coil-compose:1.4.0")

在使用 jetpack compose 时是否有不同的正确方法来识别线圈中的无效 URL

【问题讨论】:

  • 这是检测错误的正确方法,在我的情况下,它不需要有效的 URL。如果是ImagePainter.State.Error,则不会显示图像。但错误可能不仅仅是因为 URL 无效,例如您的连接可能较弱。请提供一个对你失败的 URL 并包含国家提供的错误描述,你可以添加一个日志来查看它。
  • 我也这么认为,但我不确定这是否是一个错误,但对于我的代码,这不起作用。下面接受的答案解决了我的问题...
  • 至少检查一下错误描述。提出的解决方案不是很干净
  • @PhilipDukhov 我通过引用响应代码而不是消息来清理代码。

标签: android-jetpack-compose coil


【解决方案1】:

添加一个检查异常的侦听器。在此示例中,文件扩展名应为“jpg”,但我删除了“g”以测试图像不存在:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        startActivity(intent)

        setContent {
            val imageUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jp"
            val painter = rememberImagePainter(
                data = imageUrl,
                builder = {
                    this.listener(
                        onError = {request, ex ->
                            if ((ex as HttpException).response.code() == 400) {
                                // Image not found
                            }
                        }
                    )
                }
            )

            Image(
                painter = painter,
                contentDescription = null
            )
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-06
    • 2022-07-29
    • 2023-04-02
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多