Jetpack Compose集成Coil 2.1.0时AsyncImage无法加载图片
问题根因
传给Coil的图片地址字段用错了。
查看接口返回对应的Photo实体类,包含两个链接字段:
url:对应图片的详情网页地址,不是可直接渲染的图片资源直链download_url:才是可以直接访问加载的图片源地址
当前代码中rememberAsyncImagePainter(photo.url)传入的是网页地址,Coil请求拿到的是HTML页面内容,无法解析为图片资源,所以无论用AsyncImage还是rememberAsyncImagePainter方案、哪怕硬编码该字段值都无法正常加载图片。
修复方案
- 替换加载字段
修改PhotoCard.kt中的图片加载逻辑,将入参替换为download_url字段:
@Composable fun PhotoCard(photo: Photo, ... ) { ... Image( painter = rememberAsyncImagePainter(photo.download_url), contentDescription = "作者:${photo.author}的摄影作品" // 若使用AsyncImage组件同理,model参数传入photo.download_url即可 ... ) }
- 核对依赖配置
如果替换字段后仍无法加载,检查模块级build.gradle中的Coil依赖,确保引入了完整的Compose适配包,2.1.0版本对应依赖配置为:
implementation "io.coil-kt:coil-compose:2.1.0"
不要仅引入基础Coil依赖而遗漏Compose适配包。
- 特殊场景排查
接口返回的图片地址为HTTPS协议,正常不需要额外配置;如果本地调试时使用了HTTP开头的地址,需要在AndroidManifest.xml的application标签下添加android:usesCleartextTraffic="true",否则Android 9及以上系统会默认拦截明文HTTP请求。
你已经正确配置了INTERNET网络权限,完成上述字段替换后即可正常加载列表图片。
内容的提问来源于stack exchange,提问作者kc_dev
相关产品推荐
相关产品推荐

