1

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

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

Image(
    painter = painter
)

该 url 以前有效,但不再有效。线圈显示默认占位符 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

4

1 回答 1

2

添加一个检查异常的侦听器。在此示例中,文件扩展名应为“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
            )
        }
    }
}
于 2021-12-02T07:38:37.817 回答