Android登录逻辑异常:添加else后忽略指定邮箱判断分支
问题分析与修复方案
你的问题出在条件判断的逻辑结构上:第二个if和它后面的else是绑定在一起的,而非和第一个if形成完整的分支链。这就导致哪怕第一个if的条件满足(邮箱是ocmt@yahoo.com),程序执行完第一个跳转后,还是会进入第二个if的判断——因为条件不满足,直接触发else里的跳转逻辑,最终你看到的就是默认跳到List3Activity,看起来像是忽略了前面的判断。
修复后的代码
把第二个if改成else if,让三个条件形成互斥的分支结构,这样只会执行其中一个符合条件的逻辑:
if (!task.isSuccessful()) { // there was an error if (password.length() < 6) { inputPassword.setError(getString(R.string.minimum_password)); } else { Toast.makeText(LoginActivity.this, getString(R.string.auth_failed), Toast.LENGTH_LONG).show(); } } else { String email = inputEmail.getText().toString(); // 提前取出邮箱字符串,避免重复调用 if(email.equals("ocmt@yahoo.com") ) { Intent i = new Intent(LoginActivity.this, ListActivity.class); startActivity(i); } else if(email.equals("ocmt1@yahoo.com") ) { // 这里改成else if,形成分支链 Intent i = new Intent(LoginActivity.this, List2Activity.class); startActivity(i); } else{ Intent i = new Intent(LoginActivity.this, List3Activity.class); startActivity(i); } } // 后续闭合代码保持不变 }); } }); } public void contasguest(View view) { Intent intent = new Intent(LoginActivity.this, ImageListshopActivity.class); startActivity(intent); }
额外优化建议
- 提前把邮箱字符串存到变量里,避免多次调用
inputEmail.getText().toString(),让代码更简洁高效。 - 如果后续要添加更多指定邮箱的跳转逻辑,建议用
HashMap做映射,不用写一堆else if,扩展性更强:HashMap<String, Class<?>> emailActivityMap = new HashMap<>(); emailActivityMap.put("ocmt@yahoo.com", ListActivity.class); emailActivityMap.put("ocmt1@yahoo.com", List2Activity.class); Class<?> targetActivity = emailActivityMap.get(email); if(targetActivity != null){ Intent i = new Intent(LoginActivity.this, targetActivity); startActivity(i); } else { Intent i = new Intent(LoginActivity.this, List3Activity.class); startActivity(i); }
内容的提问来源于stack exchange,提问作者mohamed mo
相关产品推荐
相关产品推荐

