簡體   English   中英

為什么此switch語句不運行?

[英]Why is this switch statement not running?

我正在嘗試使用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語句未運行,因為第三行應該在logcat上。 有人可以解釋為什么嗎?

更新:還有另一個錯誤:

ViewRootImpl: sendUserActionEvent() mView == null

您忘記在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值。

您在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