Kotlin try-catch捕获异常后仍执行Activity跳转代码的问题
解决输入无效仍跳转Activity的问题
我懂你的困扰——明明捕获异常弹了提示,跳转Activity的代码却还是会执行,这确实闹心。问题出在你当前的逻辑里:没有在执行绑定服务和跳转前主动做输入验证,很多无效输入的情况根本没触发异常,导致try块里的代码一路跑到了startActivity。
下面给你调整后的代码,重点加了输入验证环节,确保只有输入完全合规时,才会执行后续的服务绑定和页面跳转:
try { val ip1: String = ip_addr1.text.toString().trim() val port1: String = port1.text.toString().trim() val ip2: String = ip_addr2.text.toString().trim() val port2: String = port2.text.toString().trim() // 第一步:检查所有字段是否为空 if (ip1.isEmpty() || port1.isEmpty() || ip2.isEmpty() || port2.isEmpty()) { throw IllegalArgumentException("所有输入字段都不能为空哦") } // 第二步:验证端口是否为有效数字 port1.toInt() port2.toInt() // 第三步:可选的IP格式验证(用正则确保符合IPv4规范) val ipPattern = Regex("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$") if (!ipPattern.matches(ip1) || !ipPattern.matches(ip2)) { throw IllegalArgumentException("IP地址格式不正确,请检查输入") } // 只有所有验证通过,才执行服务绑定和页面跳转 Intent(this, MyService::class.java).also { intent -> intent.putExtra("ip1", ip1) intent.putExtra("port1", port1) intent.putExtra("ip2", ip2) intent.putExtra("port2", port2) bindService(intent, connection, Context.BIND_AUTO_CREATE) } val intent = Intent(this, HomeActivity::class.java) startActivity(intent) } catch (e: NumberFormatException) { showToast("端口必须是有效数字哦") } catch (e: IllegalArgumentException) { showToast(e.message ?: "输入内容无效,请检查") } catch (e: Exception) { showToast(e.toString()) }
为什么这样改能解决问题?
- 前置验证拦截无效输入:在执行任何核心操作前,先检查字段是否为空、端口是否为数字、IP格式是否正确。只要有一项不满足,就主动抛出异常,直接进入catch块弹提示,后面的bindService和startActivity根本不会执行。
- 异常触发后终止try块执行:一旦抛出异常,try块中抛出点之后的代码会立刻停止,不会继续往下走,彻底避免了无效输入下的页面跳转。
内容的提问来源于stack exchange,提问作者GeoCap
相关产品推荐
相关产品推荐

