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

Android中Activity间传递图片的实现方法及代码咨询

Android不同Activity间传递图片的问题分析与解决方案

嘿,我来帮你梳理下当前代码的问题,再给你几个可行的实现方案~

当前代码的核心问题

你第一个Activity里传递的是Uri对象(lists.getImageUri()返回的应该是Uri),但第二个Activity却用getIntent().getIntExtra("image",00)去获取int类型的资源ID——这俩类型完全不匹配啊!所以第二个Activity拿到的只会是默认值0,自然没法显示图片。

针对不同场景的可行方案

场景1:图片是项目本地资源(drawable/mipmap下的图片)

如果你的图片是打包在APP里的资源文件,直接传递资源ID是最简单的:
第一个Activity代码:

// 假设你的图片资源是R.drawable.my_test_image
intent.putExtra("image_res_id", R.drawable.my_test_image);

第二个Activity代码:

int imageResId = getIntent().getIntExtra("image_res_id", 0);
if (imageResId != 0) {
    imag.setImageResource(imageResId);
}

场景2:图片来自文件系统/图库/相机(Uri形式)

如果图片是外部存储的文件或者通过ContentProvider获取的(比如从图库选的图),传递Uri是正确的思路,但接收方式要改:
第一个Activity代码:

Uri imageUri = lists.getImageUri();
intent.putExtra("image_uri", imageUri);

第二个Activity代码:

Uri imageUri = getIntent().getParcelableExtra("image_uri");
if (imageUri != null) {
    // 注意:Android 10及以上访问外部存储需要适配,比如使用MediaStore或者申请权限
    imag.setImageURI(imageUri);
}

这里要注意,Uri是Parcelable类型,所以要用getParcelableExtra来获取,而不是getIntExtra。另外如果是Android 10+,访问外部文件可能需要处理权限或者使用MediaStore API,避免出现权限拒绝的问题。

场景3:传递内存中的Bitmap(不推荐大图片)

如果图片是你在内存中生成的Bitmap,也可以直接传递,但要注意Bitmap不能太大,否则会触发TransactionTooLargeException:
第一个Activity代码:

Bitmap bitmap = ...; // 你的Bitmap对象
intent.putExtra("image_bitmap", bitmap);

第二个Activity代码:

Bitmap bitmap = getIntent().getParcelableExtra("image_bitmap");
if (bitmap != null) {
    imag.setImageBitmap(bitmap);
}

⚠️ 小提示:这种方式只适合小尺寸Bitmap,大图片优先用Uri方案,避免内存溢出或者跨进程传输异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:40:12