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
相关产品推荐
相关产品推荐

