我有许多语言的列表,用户可以选择这些语言进行文本到语音转换操作。我希望设置用户为tts选择的语言。但是setLanguage需要一个Locale,在那个阶段,我只有一个String。所以这就是我试过的,但是我得到了一个nullpointer异常:
@Override
public void onClick(View view) {
Languages currentLanguages = languagesList.get(getAdapterPosition());
Snackbar snackbar;
snackbar = Snackbar.make(view, currentLanguages.getLocaleDisplay() + " selected", Snackbar.LENGTH_INDEFINITE)
.setAction("Next", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), MainActivity.class);
String chosenLanguage = localeDisplay.getText().toString();
System.out.println(chosenLanguage);
intent.putExtra("language_key", chosenLanguage);
v.getContext().startActivity(intent);
}
});
Locale chosenLocale = localeDisplay.getTextLocale();
chosenLocale.getLanguage();
myTTS.setLanguage(chosenLocale);
View snackBarView = snackbar.getView();
snackBarView.setBackgroundColor(grey_blue);
snackbar.show();
}
我非常感谢有关为什么这不起作用的一些指示。谢谢!
这是logcat:
FATAL EXCEPTION: main
Process: com.madhatter.nat.pronounce, PID: 864
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.speech.tts.TextToSpeech.setLanguage(java.util.Locale)' on a null object reference
at com.madhatter.nat.pronounce.LanguagesRecycler.RecyclerAdapter$MyViewHolder$1.onClick(RecyclerAdapter.java:63)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
编辑:getAdapterPosition()为我提供了单击的语言编号。如何根据文件转发器列表中的位置设置文本转语音引擎的语言?