简体   繁体   English

为什么此switch语句不运行?

[英]Why is this switch statement not running?

I am trying to make a translator app in Android Studio using Microsoft Translator API, but for some reason, the switch statement that decides which language to translate some text into is not running. 我正在尝试使用Microsoft Translator API在Android Studio中制作翻译器应用程序,但是由于某种原因,决定将某些文本翻译成哪种语言的switch语句未运行。 My code is: 我的代码是:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      LayoutInflater li = LayoutInflater.from(context);
      final View promptsView = li.inflate(R.layout.alertdialog, null);
      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

      alertDialogBuilder.setView(promptsView);
      final Spinner spinner = (Spinner) promptsView.findViewById(R.id.LanguagePicker);
      final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(Text.this,
                        R.array.language, android.R.layout.simple_spinner_item);

      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

      spinner.setAdapter(adapter);

      alertDialogBuilder.setCancelable(false)
      /*The setPositiveButton determines which language I want it translated to.*/
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                             public void onClick(DialogInterface dialog,int id) {

                               //this is the main line

                               text = spinner.getSelectedItem().toString();

                               spinner.setAdapter(adapter);
                               String r = textInput.getText().toString();
                               allTheTranslatedText = getTranslatedText(r);
                               Log.e("Checkpoint", "Program started to execute getTranslatedText()");
                                            textOutput.setText(allTheTranslatedText);

                             }
                           })

                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                             public void onClick(DialogInterface dialog, int id) {
                               dialog.cancel();
                             }
                            });
        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();


      }
    });

    }

/* getTranslatedText() outputs text */
public String getTranslatedText (String text1){
  Translate.setClientId("CLIENT ID");
  Translate.setClientSecret("CLIENT SECRET");
  String translatedText = "";
  Log.e("Checkpoint", "getTranslatedText() was called");
  try {
    switch (text) {
      case "English":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.ENGLISH); // location of Unhandled exception
        outputLanguageLabel.setText("English");
        Log.e("Checkpoint", "The program should work perfectly if this appears.");

      case "French":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.FRENCH);
        outputLanguageLabel.setText("French");
        // location of Unhandled exception
      case "Spanish":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.SPANISH);
        outputLanguageLabel.setText("Spanish");
// location of Unhandled exception
      case "German":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.GERMAN);
        outputLanguageLabel.setText("German");
// location of Unhandled exception
      case "Italian":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.ITALIAN);
        outputLanguageLabel.setText("Italian");
// location of Unhandled exception
      case "Russian":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.RUSSIAN);
        outputLanguageLabel.setText("Russian");
// location of Unhandled exception
      case "Mandarin":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.CHINESE_TRADITIONAL);
        outputLanguageLabel.setText("Mandarin");
// location of Unhandled exception
      case "Korean":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.KOREAN);
        outputLanguageLabel.setText("Korean");
// location of Unhandled exception
      case "Japanese":
        translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.JAPANESE);
        outputLanguageLabel.setText("Japanese");

// location of Unhandled exception
      default:
        Log.e("Checkpoint", "Program didn't recognize text.");
    }

  } catch (Exception e) {
            e.printStackTrace();
  }
  return translatedText;
}

}

I used logcat statements to determine which code is running and which code isn't, but when I selected English as the language I want my text to be translated to, logcat submitted this: 我使用logcat语句来确定正在运行的代码,而不是正在运行的代码,但是当我选择英语作为我想要将文本翻译成的语言时,logcat提交了以下内容:

Checkpoint: Program started to execute getTranslatedText()
Checkpoint: getTranslatedText() was called

instead of what I thought it would've done: 而不是我认为会做的:

Checkpoint: Program started to execute getTranslatedText()
Checkpoint: getTranslatedText() was called
Checkpoint: The program should work perfectly if this appears

This means the switch statement was not running, because the 3rd line would have been on logcat. 这意味着switch语句未运行,因为第三行应该在logcat上。 Can someone please explain why? 有人可以解释为什么吗?

UPDATE: there is also another error: 更新:还有另一个错误:

ViewRootImpl: sendUserActionEvent() mView == null

you're forget to add break in your switch statement: 您忘记在switch语句中添加break:

switch (text) {
  case "English":
    translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.ENGLISH); // location of Unhandled exception
    outputLanguageLabel.setText("English");
    Log.e("Checkpoint", "The program should work perfectly if this appears.");

    // Need to add break; after case
    break;

    ...

  default:
    Log.e("Checkpoint", "Program didn't recognize text.");
}

For each case , you need to add break. 对于每种case ,您都需要添加中断。 If you're not, all case will go to the default: 如果不是这样,所有情况都将采用default:


UPDATE 更新

It seems that you get the wrong text for switch case: 似乎您为开关盒输入了错误的text

public String getTranslatedText (String text1){
        Translate.setClientId("CLIENT ID");
        Translate.setClientSecret("CLIENT SECRET");
        String translatedText = "";
        Log.e("Checkpoint", "getTranslatedText() was called");
        try {

            // Should check it first
            Log.d("TEXT", "text is = " + text);
            switch (text) {
               case "English":
               ...
               defaut:
               ...
            }
        }
        ..
      }

you need to check for text value. 您需要检查text值。

You've made a mistake in the switch expression, because you wrote text instead of text1 as well as you forgot the break statement. 您在switch表达式中犯了一个错误,因为您写了text而不是text1,并且忘记了break语句。

public String getTranslatedText (String **text1**){
        Translate.setClientId("CLIENT ID");
        Translate.setClientSecret("CLIENT SECRET");
        String translatedText = "";
        Log.e("Checkpoint", "getTranslatedText() was called");
        try {
            switch (**text1**) {
                case "English":
                    translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.ENGLISH); // location of Unhandled exception
                    outputLanguageLabel.setText("English");
                    Log.e("Checkpoint", "The program should work perfectly if this appears.");
                        break;

                case "French":
                    translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.FRENCH);
                    outputLanguageLabel.setText("French");
                      break;
                    // location of Unhandled exception
                case "Spanish":
                    translatedText = Translate.execute(text1, Language.AUTO_DETECT, Language.SPANISH);
                    outputLanguageLabel.setText("Spanish");
                        break;
                           .......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM