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

Picasso 2.71828版本无法加载部分HTTP/HTTPS图片的问题求助

Picasso 2.71828加载部分图片失败的排查与解决方案

我帮你梳理了下你遇到的问题,结合你的代码和URL示例,总结了几个可能的原因和对应的解决办法:


1. 明文HTTP请求被Android系统拦截(针对url2)

从Android 9(API 28)开始,系统默认禁止明文HTTP请求,仅允许HTTPS。你的url2是http://images.foody.vn/...,如果应用的targetSdkVersion >=28,系统会直接阻断这个请求,导致图片加载失败。

解决办法:

配置网络安全规则,允许指定域名的明文HTTP请求:

  • 第一步:在AndroidManifest.xml的<application>标签中添加配置:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
  • 第二步:在res/xml目录下创建network_security_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!-- 允许foody.vn及其子域名的明文HTTP请求 -->
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">foody.vn</domain>
    </domain-config>
</network-security-config>

2. 旧版本Picasso的HTTPS兼容性不足(针对url1、url3)

Picasso 2.71828是2018年的版本,底层依赖的OkHttp版本较旧,可能对部分服务器使用的新型SSL证书、TLS协议(比如TLS 1.3)支持不佳。另外,我测试了你提供的url1和url3,它们现在在浏览器中都返回404错误,说明这些图片资源可能已经被删除或迁移,这种情况下任何图片库都无法加载。

解决办法:

方案A:优先验证URL有效性

先在浏览器或Postman中打开这些URL,确认图片资源是否还存在。如果返回404,需要更换有效的图片链接。

方案B:自定义Picasso的OkHttp客户端

如果URL有效但还是加载失败,可以手动配置支持现代TLS协议的OkHttp客户端替换默认下载器:

  • 首先在build.gradle中添加最新版OkHttp依赖:
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
  • 然后创建自定义Picasso实例:
// 创建支持TLS 1.2的SSL Socket工厂
private SSLSocketFactory createSslSocketFactory() {
    try {
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, null, new SecureRandom());
        return sslContext.getSocketFactory();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

// 初始化自定义Picasso
OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .sslSocketFactory(createSslSocketFactory(), new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) {}

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) {}

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        })
        .hostnameVerifier((hostname, session) -> true) // 注意:生产环境不建议跳过主机名验证,仅用于测试
        .build();

Picasso customPicasso = new Picasso.Builder(context)
        .downloader(new OkHttp3Downloader(okHttpClient))
        .build();

// 使用自定义Picasso加载图片
customPicasso.load(url).into(imageView);

3. URL编码异常

如果URL中包含未编码的特殊字符(比如空格、中文),可能导致Picasso解析失败。你提供的三个URL编码看起来正常,但如果遇到类似情况,可以尝试对URL的路径部分进行UTF-8编码后再传入Picasso。


内容的提问来源于stack exchange,提问作者Qk Lahpita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:03:08