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.