交换机案例中的异常处理 - Android

时间:2016-07-14 16:24:46

标签: java android exception-handling switch-statement

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

@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显示为找不到市场应用,但当异常位于case R.id.action_feedback:时,它会显示两个Toasts,首先找不到邮件应用&然后找不到市场应用。意味着它进入两个捕获块。任何人都可以解释它是如何工作的?

然而,我通过在try语句之前放置switch块并在switch语句关闭后放置catch块,使我的代码工作。但我仍然不知道这是怎么回事?

提前致谢:)

3 个答案:

答案 0 :(得分:0)

你并没有突破每一个案例。 尝试使用"休息"在每个案件之后。

答案 1 :(得分:0)

您应该始终在每种情况下添加public class FolderDirectoryStructure { public string ChildFolder {get; set;} public List<FileExtension> Extension {get; set;} }

答案 2 :(得分:0)

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