Java 为什么这个switch语句没有运行?
我试图在Android Studio中使用Microsoft translator API制作一个翻译器应用程序,但由于某些原因,决定将某些文本翻译成哪种语言的switch语句没有运行。 我的代码是:Java 为什么这个switch语句没有运行?,java,android,Java,Android,我试图在Android Studio中使用Microsoft translator API制作一个翻译器应用程序,但由于某些原因,决定将某些文本翻译成哪种语言的switch语句没有运行。 我的代码是: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LayoutInflater li = LayoutInflater.from(
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;
}
}
而不是我想象的那样:
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.");
}
对于每个案例
,您需要添加中断。如果没有,则所有案例都将转到默认值:
更新 对于开关箱,您似乎得到了错误的
文本
:
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
值。您在开关表达式中犯了一个错误,因为您编写了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;
.......
不可以。变量“text”应该是微调器所选的语言,而text1应该是即将翻译的文本。您忘记添加
break代码>嗯。。。我应该把中断放在哪里?为什么不把文本
实际上就在开关
之前的内容记录下来,看看它是否符合您的期望。并考虑使用更有意义的变量名。如果这个问题得到解决,正如所接受的答案所证明的那样,请不要通过编辑来改变问题以增加更多的错误。ViewRootImpl
日志可能无论如何都是不相关的。问题是默认的:log语句没有执行。@MCoder:您忘记为switch提供文本
。出于某种原因,它仍然没有记录第三条消息。可能我遗漏了什么,但是我没有找到记录检查点的代码:如果出现此情况,程序应该可以正常工作。你能告诉我行在哪里吗?在“case:English”中,有一个日志语句,上面写着“Checkpoint”和“如果出现这种情况,程序应该工作得很好”。在你发布自己的答案之前,请尝试阅读注释和其他答案。text和text1的值不同。
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;
.......