【问题标题】:Exception Handling in switch case - Android开关盒中的异常处理 - Android
【发布时间】:2016-07-14 16:24:46
【问题描述】:

我有这段代码,它没有按预期工作:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_feedback: {
            try {
                Intent intent_email = new Intent(Intent.ACTION_SEND);
                intent_email.putExtra(Intent.EXTRA_EMAIL, new String[]{"feedback@xyz.com"});
                intent_email.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
                intent_email.setType("message/rfc822");
                startActivity(intent_email);
                return true;
            } catch (Exception e) {
                Toast.makeText(getBaseContext(), "No Mail app found", Toast.LENGTH_SHORT).show();
            }
        }
        case R.id.action_rate: {
            try {
                startActivity(new Intent(Intent.ACTION_VIEW,
                        Uri.parse("market://details?id=" + getPackageName())));
            } catch (android.content.ActivityNotFoundException e) {
                Toast.makeText(getBaseContext(), "No Market app found", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    }
    return super.onOptionsItemSelected(item);
}

此代码的问题在于,当 case R.id.action_rate: 中存在异常时,它会显示一个 Toast,为 No Market app found 但是当异常在 case R.id.action_feedback: 中时,它会显示两个 Toast,首先是 未找到邮件应用,然后未找到电子市场应用。意味着它进入两个 catch 块。谁能解释一下它是如何工作的?

但是,我通过将try 块放在switch 语句之前并将catch 块放在switch 语句关闭之后使我的代码正常工作。但是我还是不知道事情的进展如何?

在此先感谢 :)

【问题讨论】:

    标签: java android exception-handling switch-statement


    【解决方案1】:

    您并没有摆脱每种情况。 尝试在每个 case 之后使用“break”。

    【讨论】:

    • 是的,但是由于我使用的是 switch case,并且当我单击 Feedback 时,它不应该进入下一个 case,即 Rate乙>。那么它是如何进入下一个 catch 块的,因为在其他情况下是这样的。
    • 如果它在第一个 try 语句中抛出错误,那么它会转到第一个 catch 块,然后它会转到下一个 case,因为第一个 catch 后缺少“break”跨度>
    【解决方案2】:

    您应该始终在每种情况下添加break;

    【讨论】:

      【解决方案3】:

      你必须在你的第一个 catch 块之后放置一个break;。您可能还需要修改退货声明。

      【讨论】:

      • 好的,我同意使用 break 可以解决问题,但这不是我的问题。我问即使我没有点击它,它是如何进入下一个案例的
      • 好吧,它进入下一个案例因为你没有一个break语句来阻止它这样做。
      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多