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

Jetpack Compose中Coil无法加载网络图片问题求助

解决Coil无法加载WeatherAPI天气图标的问题

以下是几个排查和解决的方向:

  • 添加网络权限
    确保你的AndroidManifest.xml中已经声明了网络访问权限,这是最容易遗漏的基础配置:

    <uses-permission android:name="android.permission.INTERNET" />
    
  • 检查Coil的OkHttpClient配置
    WeatherAPI的CDN使用HTTPS协议,可能Coil默认的客户端存在证书校验问题。可以尝试自定义OkHttpClient跳过证书校验(仅用于测试排查,生产环境请配置合法的证书信任策略):
    在你的Application类中初始化Coil:

    import android.app.Application
    import coil.ImageLoader
    import coil.ImageLoaderFactory
    import okhttp3.OkHttpClient
    import javax.net.ssl.SSLContext
    import javax.net.ssl.X509TrustManager
    
    class MyApp : Application(), ImageLoaderFactory {
        override fun newImageLoader(): ImageLoader {
            val trustAllCerts = arrayOf<X509TrustManager>(object : X509TrustManager {
                override fun checkClientTrusted(chain: Array<out java.security.cert.X509Certificate>?, authType: String?) {}
                override fun checkServerTrusted(chain: Array<out java.security.cert.X509Certificate>?, authType: String?) {}
                override fun getAcceptedIssuers(): Array<java.security.cert.X509Certificate> = emptyArray()
            })
    
            val sslContext = SSLContext.getInstance("TLS").apply {
                init(null, trustAllCerts, java.security.SecureRandom())
            }
    
            val okHttpClient = OkHttpClient.Builder()
                .sslSocketFactory(sslContext.socketFactory, trustAllCerts[0])
                .hostnameVerifier { _, _ -> true }
                .build()
    
            return ImageLoader.Builder(this)
                .okHttpClient(okHttpClient)
                .build()
        }
    }
    

    记得在AndroidManifest.xml中指定这个自定义的Application类。

  • 排除代理/VPN干扰
    真机如果开启了代理或者VPN,可能导致Coil无法正常访问CDN资源,建议关闭相关服务后重试。

  • 验证URL的正确性
    打印拼接后的完整URL,确保没有拼写错误、空格或特殊字符:

    val iconUrl = "https:${forecastDay.day.condition.icon}"
    Log.d("CoilDebug", "Icon URL: $iconUrl")
    

    把打印出的URL复制到浏览器再次确认是否能正常访问。

  • 测试基础加载方式
    暂时替换AsyncImage为普通的Compose加载方式,排除组件配置问题:

    Image(
        painter = rememberAsyncImagePainter(
            model = "https://cdn.weatherapi.com/weather/64x64/day/113.png",
            error = painterResource(R.drawable.full_sun_icon)
        ),
        contentDescription = "Temp Condition Icon",
        modifier = modifier.size(50.dp)
    )
    
  • 升级Coil版本
    旧版本的Coil可能存在HTTPS兼容性问题,建议升级到最新稳定版,比如在你的build.gradle.kts(或build.gradle)中:

    implementation("io.coil-kt:coil-compose:2.5.0")
    

内容的提问来源于stack exchange,提问作者Abdullah Hameed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:03:19