Android Studio Kotlin中扫码后如何将数据显示到TextBox
问题分析与修复方案
你的代码核心问题是完全没有使用扫码获取到的数据,反而误用了输入框decryptET的文本去解密,导致encryptET永远不会显示扫码结果。
具体错误点
在try代码块中,你传入解密函数的是decryptET输入框的现有内容,而非扫码得到的result.contents,这完全偏离了需求:
val decryptedText = EncryptDecrypt.decrypt(decryptET.text.toString())
修复后的代码
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (resultCode == Activity.RESULT_OK) { val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data) if (result != null) { if (result.contents == null) { Toast.makeText(this, "扫码已取消", Toast.LENGTH_LONG).show() } else { try { // 1. 获取扫码得到的原始数据 val scannedContent = result.contents // 2. 对扫码数据进行解密(如果业务需要) val decryptedText = EncryptDecrypt.decrypt(scannedContent) // 3. 将解密后的内容设置到目标输入框 encryptET.setText(decryptedText) } catch (e: InvalidAlgorithmParameterException) { e.printStackTrace() Toast.makeText(this, "解密失败:算法参数错误", Toast.LENGTH_SHORT).show() } catch (e: NoSuchPaddingException) { e.printStackTrace() Toast.makeText(this, "解密失败:填充模式不存在", Toast.LENGTH_SHORT).show() } catch (e: IllegalBlockSizeException) { e.printStackTrace() Toast.makeText(this, "解密失败:块大小非法", Toast.LENGTH_SHORT).show() } catch (e: NoSuchAlgorithmException) { e.printStackTrace() Toast.makeText(this, "解密失败:算法不存在", Toast.LENGTH_SHORT).show() } catch (e: BadPaddingException) { e.printStackTrace() Toast.makeText(this, "解密失败:填充错误", Toast.LENGTH_SHORT).show() } catch (e: InvalidKeyException) { e.printStackTrace() Toast.makeText(this, "解密失败:密钥无效", Toast.LENGTH_SHORT).show() } } } else { super.onActivityResult(requestCode, resultCode, data) } } }
额外建议
- 确认
encryptET是你要显示扫码结果的目标输入框,若实际应为decryptET,请替换对应变量名。 - 不要仅在控制台打印异常,给用户显示Toast提示,方便快速排查问题。
- 提前验证扫码得到的
scannedContent格式、长度是否符合解密要求,避免无意义的异常触发。
内容的提问来源于stack exchange,提问作者jovlog
相关产品推荐
相关产品推荐

