条码扫描获取的Base64图片转换失败:‘unimplemented’错误求助
解决PDF_417条码Base64图片显示错误及代码问题
代码存在的核心问题
- Intent传递与接收不匹配:第一个页面传递的是Bitmap(key为
image),第二个页面却尝试获取key为barcodeValue的字符串,完全不对应 - ImageView设置方法错误:不存在
setImage(String)方法,无法直接用字符串设置图片 - 直接传递Bitmap存在隐患:跨页面传递Bitmap易引发内存问题,也是导致
Failed to create image decoder with message 'unimplemented'错误的可能原因 - 拼写错误:
Sysytem.out.println应为System.out.println
修正后的代码
第一个页面(条码扫描回调)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { val result: IntentResult? = IntentIntegrator.parseActivityResult(requestCode, resultCode, data) if (result != null) { val barcodeValue = result.content if (barcodeValue != null) { // 直接传递Base64字符串,避免Bitmap跨页面传递的问题 val intent = Intent(this, BarcodeScanner::class.java) intent.putExtra("barcode_base64", barcodeValue) startActivity(intent) } else { System.out.println("Can't handle") } } else { super.onActivityResult(requestCode, resultCode, data) } }
第二个页面(图片显示页面)
class BarcodeScanner : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.barcode_layout) val barcodeImage = findViewById<ImageView>(R.id.img) val barcodeBase64 = intent.getStringExtra("barcode_base64") barcodeBase64?.let { val imageBytes = Base64.decode(it, Base64.DEFAULT) val decodedBitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size) barcodeImage.setImageBitmap(decodedBitmap) } } }
修正说明
- 改用传递Base64字符串替代Bitmap,避免跨页面传递大对象引发的内存和解码错误
- 统一Intent的key值,确保传递与接收逻辑对应
- 使用
setImageBitmap方法正确为ImageView设置解码后的图片 - 修复了拼写错误
内容的提问来源于stack exchange,提问作者user16357470
相关产品推荐
相关产品推荐

