Катушка: загрузка изображения из firebase не работает - невозможно получить данные. Сборщик не поддерживает
Image(
modifier = Modifier.size(100.dp).padding(16.dp),
painter = rememberImagePainter(
ImageRequest.Builder(LocalContext.current)
// .data("https://media-cldnry.s-nbcnews.com/image/upload/t_fit-760w,f_auto,q_auto:best/streams/2013/March/130326/1C6639340-google-logo.jpg")
.data(Firebase.storage.getReference("<Redacted>"))
.crossfade(false)
.listener(object : ImageRequest.Listener {
override fun onError(request: ImageRequest, throwable: Throwable) {
super.onError(request, throwable)
Log.e("CoilRequest", "${throwable.message}")
}
})
.placeholder(getShimmerPlaceholder())
.build()
),
contentDescription = "description",
contentScale = ContentScale.Fit
)
Закомментированный код работает, когда я использую случайныйimage
из Интернета, но когда я использую размещенное изображение из firebase, оно не работаетcompose
, и у меня естьerror
обратный вызов из катушки
Unable to fetch data. No fetcher supports: gs://
Такой же подход используется вview
однако это работает.
inline fun ImageView.load(data: data: StorageReference, builder: ImageRequest.Builder.() -> Unit) : Disposable {
val loadRequest = ImageRequest.Builder(context)
.data(data)
.target(this@load)
.apply(builder).build()
return FireCoil.loader(context).enqueue(loadRequest)
}
Есть идеи? Спасибо!
2 ответа
URL-адреса, начинающиеся сgs://
являются собственным форматом URL-адресов Google Cloud Storage и не распознаются многими распространенными библиотеками, одной из которых, по-видимому, является Coil.
Для отображения данных у вас есть два варианта:
- Создайте URL-адрес загрузки для изображения, который является общедоступным URL-адресом, начинающимся с
https://
, и вместо этого передайте его в Coil. - Загрузите файл по URL-адресу через Firebase SDK, а затем отобразите изображение в Coil на основе локального файла/данных.
У меня была похожая проблема, и, как описал ответ «Франка ван Пуффелена», она была решена путем добавления полного URL-адреса в RememberAsyncImagePainter, например:
Image(
painter = rememberAsyncImagePainter(
model = "https://your_url/$imageUrl"
),
contentDescription = null
)