Изображение не отображается с помощью RememberAsyncImagePainter Coil

Изображение всегда выдает мне эту ошибку:

Error loading image (Ask Gemini)
java.lang.IllegalStateException: Unable to create a fetcher that supports: https://my_domain/assets/webdesign/images/flags/world/england.png

Это моя составная функция для отображения изображения imageUrl хорош, и когда я проверяю изображение ссылки в браузере, отображается

Проблема в том, что я всегда получаю .error(R.drawable.ic_sport_default)

@Composable
fun FlagImage(
    imageUrl: URL?,
    contentDescription: String,
) {
    val headers = Headers.Builder()
        .add("Cookie", "demo_access=M5Slo246")
        .build()
    val model = ImageRequest.Builder(LocalContext.current)
        .data(imageUrl)
        .placeholder(R.drawable.ic_sport_default)
        .error(R.drawable.ic_sport_default)
        .headers(headers).build()
    val painterModel = rememberAsyncImagePainter(model = model)
    Image(
        painter = painterModel,
        contentDescription = contentDescription,
    )
}
1
0
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Параметр imageUrl изменен на строку, чтобы обеспечить совместимость с методом данных Coil. Кроме того, вы можете регистрировать ошибки через прослушиватель.

@Composable
fun MyScreen() {
    val imageUrl = "https://images.unsplash.com/photo-1551963831-b3b1ca40c98e"
    FlagImage(imageUrl = imageUrl, contentDescription = "Test Image")
}

@Composable
fun FlagImage(
    imageUrl: String?,
    contentDescription: String,
) {
    val headers = Headers.Builder()
        .add("Cookie", "demo_access=M5Slo246")
        .build()
    val model = coil.request.ImageRequest.Builder(LocalContext.current)
        .data(imageUrl)
        .placeholder(R.drawable.ic_launcher_background)
        .error(R.drawable.ic_launcher_foreground)
        .listener(
        onStart = { request -> Log.d("FlagImage", "Image request started: $request") },
        onSuccess = { request, metadata ->
            Log.d("FlagImage", "Image request successful: $request")
        },
        onError = { request, throwable ->
            Log.e("FlagImage", "Image request failed: $request")
        }
    )
        .headers(headers).build()
    val painterModel = rememberAsyncImagePainter(model = model)
    Image(
        painter = painterModel,
        contentDescription = contentDescription,
        modifier = Modifier.size(350.dp),
    )
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    MyScreen()
}

Да, проблема была с URI, мне нужно было только преобразовать его в строку.

Zvonimir Brleković 20.06.2024 14:00

Другие вопросы по теме