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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:01:09