如何在Kotlin中通过Intent.putExtra()传递Bitmap并加载到ImageView?
解决Kotlin中通过Intent传递Bitmap到另一个Activity的问题
核心问题修正
你当前的错误在于接收数据时误用了getStringExtra(),但传递的是Bitmap类型而非字符串。Bitmap实现了Parcelable接口,可直接通过Intent的Parcelable相关方法传递和获取。
正确实现步骤
1. 发送方(MainActivity)代码(现有代码无需修改,补充启动逻辑)
// 在onActivityResult中获取相机缩略图 val thumbnail: Bitmap = data!!.extras!!.get("data") as Bitmap // 创建Intent并传递Bitmap val screenSwitch2 = Intent(this@MainActivity, mlscreen::class.java) screenSwitch2.putExtra("bitmap", thumbnail) startActivity(screenSwitch2) // 补充启动Activity的代码
2. 接收方(mlscreen)代码
替换错误的getStringExtra(),改用getParcelableExtra()获取Bitmap:
// 获取传递过来的Bitmap val thumbnail = intent.getParcelableExtra<Bitmap>("bitmap") // 判空后设置到ImageView thumbnail?.let { yourImageView.setImageBitmap(it) }
额外注意事项
- 直接传递Bitmap仅适合小尺寸图片(比如相机缩略图),如果是大尺寸图片,可能触发
TransactionTooLargeException(Intent传递数据有大小限制)。 - 若需传递大图,建议将Bitmap保存为本地文件,再通过Intent传递文件路径:
// 发送方保存Bitmap到本地缓存 val tempFile = File(externalCacheDir, "temp_photo.jpg") FileOutputStream(tempFile).use { outputStream -> thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, outputStream) } // 传递文件路径 screenSwitch2.putExtra("image_path", tempFile.absolutePath) // 接收方读取图片 val imagePath = intent.getStringExtra("image_path") imagePath?.let { val bitmap = BitmapFactory.decodeFile(it) yourImageView.setImageBitmap(bitmap) }
内容的提问来源于stack exchange,提问作者Sohum S
相关产品推荐
相关产品推荐

