Kotlin Android Studio:正确条件下If语句未执行问题排查
Kotlin登录页Intent验证分支不执行的排查方案
检查Intent传递的键名是否完全匹配
这是最容易踩的坑:注册页putExtra用的键和登录页getStringExtra用的键必须完全一致(包括大小写)。比如注册页写的是putExtra("USER_NAME", ...),登录页却用getStringExtra("Username"),肯定拿不到正确值。
建议把键定义成常量,避免拼写错误:// 全局常量类或者在Activity里定义 const val KEY_USERNAME = "KEY_USERNAME" const val KEY_PASSWORD = "KEY_PASSWORD" // 注册页传递数据 intent.putExtra(KEY_USERNAME, inputUsername.text.toString()) // 登录页获取数据 val registeredName = intent.getStringExtra(KEY_USERNAME) ?: ""确认注册页是否正确携带了Intent Extra
检查注册页启动登录页的代码,是不是把带extra的Intent传进去了?比如别写成这样:// 错误:新建了空的Intent,没带extra startActivity(Intent(this, LoginActivity::class.java))正确的写法应该是先给Intent添加extra,再启动:
val loginIntent = Intent(this, LoginActivity::class.java).apply { putExtra(KEY_USERNAME, inputUsername.text.toString()) putExtra(KEY_PASSWORD, inputPassword.text.toString()) } startActivity(loginIntent)排查字符串比较的细节问题
有时候看起来输入的内容和注册的一样,但实际可能有差异:- 输入框内容带前后空格:比如用户输入时不小心多打了空格,而注册的内容没有。解决方法是比较前先
trim:val inputName = inputUsername.text.toString().trim() val inputPwd = inputPassword.text.toString().trim() if (inputName == registeredName && inputPwd == registeredPwd) { // 跳转主页 } - 大小写不一致:如果你的登录逻辑不区分大小写,要用
equals(inputName, ignoreCase = true),否则直接用==会区分大小写。
- 输入框内容带前后空格:比如用户输入时不小心多打了空格,而注册的内容没有。解决方法是比较前先
加日志确认实际获取到的值
别光靠猜,直接打印日志看拿到的注册数据和用户输入的到底是什么:Log.d("LoginCheck", "注册用户名: $registeredName | 输入用户名: ${inputUsername.text}") Log.d("LoginCheck", "注册密码: $registeredPwd | 输入密码: ${inputPassword.text}")运行后看Logcat里的输出,就能清楚知道两边的值是否真的一致,有没有null或者其他异常。
确认登录页获取数据的时机
不要在onCreate之外的地方(比如全局变量初始化时)获取Intent extra,因为页面重建时(比如横竖屏切换)Intent可能会更新,而全局变量不会同步。建议在onCreate方法里通过getIntent()获取最新的extra:override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) // 在这里获取数据 val registeredName = intent.getStringExtra(KEY_USERNAME) ?: "" val registeredPwd = intent.getStringExtra(KEY_PASSWORD) ?: "" // 后续逻辑... }
内容的提问来源于stack exchange,提问作者Depleted Money
相关产品推荐
相关产品推荐

