You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose中使用Coil加载Google Books API返回的图书封面图片失败求助

Jetpack Compose中使用Coil加载Google Books API返回的图书封面图片失败求助

嘿,我最近在做一个Jetpack Compose的图书APP,用Google Books API拉取图书信息和封面,但遇到个头疼的问题——用Coil加载API返回的图片URL时,封面死活显示不出来。换其他非Google的图片URL就完全正常,有没有大佬遇到过类似情况呀?

下面是我用到的代码片段:

Image(
    painter = rememberAsyncImagePainter(book.imageUrl),
    contentDescription = book.name,
    modifier = Modifier
        .clip(RoundedCornerShape(4.dp))
        .size(60.dp),
    contentScale = ContentScale.Crop
)

我试过用AsyncImage,也换过Glide,API返回的图片URL确实拿到手了,但就是显示不出来。举个例子,我用的其中一个URL是:http://books.google.com/books/content?id=-q0reoyIO30C&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api


可能的解决方案

我后来查了相关资料,大概率是明文HTTP请求被Android系统拦截的问题!因为从Android 9(API 28)开始,系统默认禁止App使用明文HTTP请求,而Google Books API返回的这个图片URL是http开头的,不是https。给你几个可行的解决办法:

  • 配置网络安全规则,允许特定域名的明文请求:
    在项目的res/xml目录下创建network_security_config.xml文件,内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">books.google.com</domain>
        </domain-config>
    </network-security-config>
    

    接着在AndroidManifest.xml的application标签里添加该配置:

    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config">
        ...
    </application>
    
  • 确认网络权限已正确添加:
    检查AndroidManifest.xml中是否包含网络权限,这是加载网络图片的基础:

    <uses-permission android:name="android.permission.INTERNET" />
    
  • 尝试将HTTP链接改为HTTPS:
    你可以试试把图片URL里的http替换成https,部分Google Books的图片链接支持HTTPS协议,这样就能绕过明文请求的限制,不用修改网络配置。

  • 验证URL的可访问性:
    把问题URL复制到浏览器中打开,确认图片是否能正常显示。如果浏览器也无法加载,那可能是API返回的URL存在问题,需要检查请求参数是否正确。

备注:内容来源于stack exchange,提问作者Daniel Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 08:55:27