我的应用程序崩溃了,在logcat中我找到了以下错误:
android.speech.tts.TextToSpeech.setLanguage(java.util.Locale)' 的空对象引用
这是我的类:
public class cl_txt2speech {
TextToSpeech txt2speech;
Activity context;
String txt2speech_current_language = "" ;
boolean txt2speech_available = false ;
//@Override
protected void onCreate(Bundle savedInstanceState) {
txt2speech = new TextToSpeech(context.getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status != TextToSpeech.ERROR) {
txt2speech_available = true ;
}
}
});
}
void txt2speech_change_language( String lang )
{
if( lang=="fr" )
{
txt2speech.setLanguage(Locale.FRANCE);
}
else if( lang=="en" )
{
txt2speech.setLanguage(Locale.UK);
}
else if( lang=="es" )
{
Locale locSpanish = new Locale("spa", "MEX");
txt2speech.setLanguage(locSpanish);
}
txt2speech_current_language = lang ;
}
void txt2speech_speak( String lang , String txt )
{
if( lang != txt2speech_current_language ){ txt2speech_change_language( lang ); }
txt2speech.speak(txt, TextToSpeech.QUEUE_FLUSH, null);
}
}
下面是我如何使用它
cl_txt2speech txt2speech = new cl_txt2speech();
txt2speech.txt2speech_speak( "fr" , "test, 1 2 3" );
我不明白问题出在哪里,我在一开始就定义了TextToSpeech txt2speech;
更新1:我加了一些System.out.println()来跟踪发生了什么,看起来onCreate中的代码从未执行。所以问题一定来自于我如何使用我的类。
更新2:
我最终将所有内容移动到我的fullscreenActivity.java文件中,而不是使用一个类,以查看发生了什么。
public class FullscreenActivity extends AppCompatActivity implements
TextToSpeech.OnInitListener{
...
public TextToSpeech txt2speech;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
txt2speech = new TextToSpeech(this, this);
...
}
@Override
public void onInit(int status) {
System.out.println( "--------------- onInit() -------------" );
if (status != TextToSpeech.ERROR) {
txt2speech_available = true;
}
}
这里 onInit 也从未被触发...
此外,在调用 txt2speech.getDefaultLanguage() 时,出现错误 "getDefaultLanguage failed: not bound to TTS engine"。
==
:https://dev59.com/DnRB5IYBdhLWcg3wyqEd#513839 - user2711811