为什么这个switch语句没有运行?

时间:2017-02-04 04:32:24

标签: java android

我正在尝试使用Microsoft Translator API在Android Studio中制作翻译应用程序,但出于某种原因,决定将某些文本翻译成哪种语言的switch语句未运行。 我的代码是:

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;
}

}

我使用logcat语句来确定哪些代码正在运行以及哪些代码没有运行,但是当我选择英语作为我希望将我的文本翻译成的语言时,logcat提交了这个:

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

而不是我认为它会完成的事情:

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

这意味着switch语句没有运行,因为第3行将在logcat上。有人可以解释一下原因吗?

更新:还有另一个错误:

ViewRootImpl: sendUserActionEvent() mView == null

2 个答案:

答案 0 :(得分:1)

您忘了在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.");
}

对于每个case,您需要添加中断。如果您不是,则所有情况都将转到default:

<强>更新

对于切换案例,您似乎得到了错误的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:
               ...
            }
        }
        ..
      }

您需要检查text值。

答案 1 :(得分:0)

您在切换表达式中犯了一个错误,因为您编写了文本而不是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;
                           .......