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

Android/Java中RecyclerView结合Picasso加载图片无显示问题排查

咱们一步一步来拆解你的问题,帮你解决图片不显示的问题:

1) Picasso的使用是否正确?

你的Picasso调用存在两处需要修正的细节:

  • 首先,你在onBindViewHolder里错误地使用了Activity的全局列表imgURLS.get(position),但Adapter自身已经持有了列表logoList,应该改成logoList.get(position)才对——否则逻辑上会依赖外部变量,很容易出现数据不一致的问题。
  • 其次,如果你使用的是Picasso 2.71828及之后的版本,Picasso.with(context)已经被废弃,官方推荐使用Picasso.get()来获取实例,修正后的调用应该是:
    Picasso.get().load(logoList.get(position)).into(holder.logo);
    

2) 为什么图片无法显示?

这是核心问题,主要有两个关键原因:

原因一:Adapter初始化时列表为空,且异步任务完成后未通知更新

你在onCreate里先启动了异步任务URLcollector,然后立刻初始化Adapter并绑定到RecyclerView——但此时imgURLS还是空的(异步任务还在后台抓取数据,还没来得及填充列表)。Adapter拿到空列表,自然只会显示空白界面。

解决方法:
把Adapter设为Activity的成员变量,在异步任务完成后通知Adapter更新数据:

// 把Adapter改成MainActivity的全局成员
private MyAdapter adapter;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setTheme(R.style.AppTheme); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    rvMain = findViewById(R.id.rvMain); 
    rvMain.setLayoutManager(new GridLayoutManager(MainActivity.this, 2));
    // 先初始化Adapter(此时imgURLS为空也没关系)
    adapter = new MyAdapter(imgURLS);
    rvMain.setAdapter(adapter);

    // 最后启动异步任务
    new URLcollector().execute(); 
}

// 修改你的URLcollector异步任务的onPostExecute方法
private class URLcollector extends AsyncTask<Void, Void, List<String>> {
    @Override
    protected List<String> doInBackground(Void... voids) {
        // 这里写你的Jsoup抓取图片URL的逻辑,返回填充好的列表
        List<String> fetchedUrls = new ArrayList<>();
        // ...你的抓取代码
        return fetchedUrls;
    }

    @Override
    protected void onPostExecute(List<String> result) {
        super.onPostExecute(result);
        // 更新Activity的imgURLS列表
        imgURLS.clear();
        imgURLS.addAll(result);
        // 通知Adapter数据已更新,RecyclerView会重新加载
        adapter.notifyDataSetChanged();
    }
}

原因二:缺少网络权限

别忘了在AndroidManifest.xml里添加网络权限,否则App无法访问网络加载图片:

<uses-permission android:name="android.permission.INTERNET" />

额外检查点

  • 确认imgURLS里的URL是有效的:把URL复制到浏览器里打开,看看能不能正常显示图片。
  • 检查recycler_item.xml里的ImageView宽高设置:如果是wrap_content,在图片加载完成前可能会显示空白,可以设置固定宽高或者match_parent(配合GridLayoutManager的列数)。
  • 确认Picasso依赖已正确添加到build.gradle(Module级别):
    implementation 'com.squareup.picasso:picasso:2.71828'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:20