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

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())
}

为什么这样改能解决问题?

  1. 前置验证拦截无效输入:在执行任何核心操作前,先检查字段是否为空、端口是否为数字、IP格式是否正确。只要有一项不满足,就主动抛出异常,直接进入catch块弹提示,后面的bindService和startActivity根本不会执行。
  2. 异常触发后终止try块执行:一旦抛出异常,try块中抛出点之后的代码会立刻停止,不会继续往下走,彻底避免了无效输入下的页面跳转。

内容的提问来源于stack exchange,提问作者GeoCap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:47:36