Android中Intent传递网络图片数据失败,新页面无法显示图片求助
问题:新Activity无法加载网络图片数据
问题现象
从RecyclerView点击跳转至新Activity后,图片无法加载,仅能正常显示文本内容。图片数据存储在MySQL中,通过Retrofit从服务器目录拉取。
相关代码
1. RecyclerView的OnBindViewHolder代码
Glide.with(holder.t1.getContext()) .load("http://example/example/images/" + data.get(position).getImage()).into(holder.img); }
2. RecyclerView Item点击事件代码
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (iOtobusSaatleriInterface != null){ int position = getAdapterPosition(); if (position != RecyclerView.NO_POSITION); iOtobusSaatleriInterface.onItemClick(position); Intent intent = new Intent(context,deneme.class); intent.putExtra("name",data.get(position).getName()); intent.putExtra("resim", String.valueOf(Glide.with(itemView) .load("http://example/example/images/"))); context.startActivity(intent); } } });
3. 新Activity(deneme.class)代码
Intent intent = getIntent(); String name = intent.getStringExtra("name"); int goruntu = intent.getIntExtra("resim",0); imageView.setImageResource(goruntu); textView.setText(name);
问题原因
- 传值错误:点击事件中传递图片参数时,错误地将Glide的请求实例转为字符串传递,而非图片的完整URL。
String.valueOf(Glide.with(itemView).load("http://example/example/images/"))得到的是Glide对象的toString结果,并非有效图片地址。 - 加载方式错误:新Activity中使用
setImageResource()加载图片,该方法仅适用于本地drawable/mipmap资源的id,而你的图片是网络资源,不能用此方法加载。 - 逻辑漏洞:原点击事件中
if (position != RecyclerView.NO_POSITION);多了一个分号,导致后续代码无论position是否有效都会执行,存在空指针风险。
解决方案
步骤1:修正点击事件的传值逻辑
传递完整的图片URL给新Activity,同时修复if语句的逻辑漏洞:
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (iOtobusSaatleriInterface != null){ int position = getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { iOtobusSaatleriInterface.onItemClick(position); Intent intent = new Intent(context, deneme.class); intent.putExtra("name", data.get(position).getName()); // 拼接完整图片URL并传递 String imageUrl = "http://example/example/images/" + data.get(position).getImage(); intent.putExtra("resim", imageUrl); context.startActivity(intent); } } } });
步骤2:修正新Activity的图片加载逻辑
使用Glide加载传递过来的网络图片URL:
Intent intent = getIntent(); String name = intent.getStringExtra("name"); String imageUrl = intent.getStringExtra("resim"); // 用Glide加载网络图片 Glide.with(this) .load(imageUrl) .into(imageView); textView.setText(name);
补充验证
确保你的AndroidManifest.xml中已添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
内容的提问来源于stack exchange,提问作者Bayram Kundaksiz
相关产品推荐
相关产品推荐

