简体   繁体   中英

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. 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:

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. 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 (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. If you're not, all case will go to the default:


UPDATE

It seems that you get the wrong text for switch case:

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.

You've made a mistake in the switch expression, because you wrote text instead of text1 as well as you forgot the break statement.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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