You need to enable JavaScript to run this app. Picasso在第二个Activity中无法加载Intent传递的URL图片问题
优惠活动
大模型
产品
解决方案
定价
更多

Picasso在第二个Activity中无法加载Intent传递的URL图片问题

问题排查方案

1. 先添加Picasso加载回调定位具体错误

你可以先给Picasso加载逻辑增加错误回调和占位图,直接拿到加载失败的具体原因:

Picasso.get()
    .load(detailImage)
    .placeholder(R.drawable.你的占位图资源) // 用于确认ImageView本身是否正常显示
    .error(R.drawable.你的错误图资源) // 用于判断是否是加载逻辑出错
    .into(binding.ivNewsImageDetail, object : Callback {
        override fun onSuccess() {
            Log.d("PICASSO_LOAD", "图片加载成功")
        }

        override fun onError(e: Exception?) {
            Log.e("PICASSO_LOAD", "图片加载失败", e)
            // 此处打印的异常栈可以直接定位问题,比如资源404、无权限、防盗链拦截等
        }
    })

2. 检查权限与网络配置

  • 确认AndroidManifest.xml中已经添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 如果你的图片URL是http开头的明文地址,Android 9及以上系统默认禁止明文流量,需要在AndroidManifest.xml的application标签添加配置:
    <application
        ...
        android:usesCleartextTraffic="true">
    

3. 检查ImageView布局配置

给ImageView设置一个纯色背景,确认控件本身是否正常在页面渲染:如果背景色都无法显示,说明是布局约束问题,比如宽高设置为0、约束条件缺失导致控件不可见,和Picasso加载逻辑无关。同时确认没有设置错误的scaleType导致图片被缩放至不可见。

4. 排查URL访问限制

确认你拿到的URL直接在浏览器中可以正常访问,部分图片资源会有防盗链限制,需要携带对应的请求头才能访问,你可以给Picasso配置全局请求头适配:

// 示例:添加Referer请求头绕过防盗链
val okHttpClient = OkHttpClient.Builder()
    .addInterceptor { chain ->
        val newRequest = chain.request().newBuilder()
            .addHeader("Referer", "该图片所属站点域名")
            .build()
        chain.proceed(newRequest)
    }.build()

val picasso = Picasso.Builder(this)
    .downloader(OkHttp3Downloader(okHttpClient))
    .build()

picasso.load(detailImage).into(binding.ivNewsImageDetail)

5. 优化冗余代码

你当前代码中重复调用了setContentView,可以删除第一行的setContentView(R.layout.activity_post),仅保留ViewBinding inflate后的setContentView(binding.root)即可,避免不必要的布局绑定异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:57:01