在我的应用中,我正在使用片段和viewpager。我有一个单独的文本到语音类,它扩展了Activity但没有布局。我已经在FragmentAdapter类中实例化了这个类,它根据当前屏幕上的活动调用speaks函数。然而,文本到语音构造函数导致应用程序崩溃导致强制关闭。我已经弄清楚文本到语音构造函数的罪魁祸首是上下文,虽然我已经使用了getApplicationContext()和className.this,但它仍然崩溃了应用程序。这是代码:
public class textToSpeech extends Activity{
TextToSpeech tts=null;
public textToSpeech()
{
Log.d("text to speech", "constructor");
tts = new TextToSpeech(textToSpeech.this , new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
Log.d("text to speech", "init");
if(status != TextToSpeech.ERROR)
{
Log.d("text to speech", "condition");
tts.setPitch(1.1f);
tts.setSpeechRate(0.4f);
tts.setLanguage(Locale.US);
}
}
});
}
请指导我解决这个问题。
我已经使用startActivity()启动了文本到语音活动,但是当我在文本到语音类中调用方法时,我仍然得到NullPointerException。 (我已将文本实例化为语音课程)
tts.SpeakText("hello world"); // in fragmentPagerAdapter exception class
在文本到语音课程中
public void SpeakText (String text)
{
Log.d("text to speech", "speaking");
if(text!=null)
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
此致
答案 0 :(得分:1)
这是因为您将代码放在活动构造函数中,但活动仍未初始化。在onCreate
中移动您的代码,它应该有效:
@Override
protected void onCreate(Bundle savedInstanceState)
{
...
tts = new TextToSpeech(textToSpeech.this , new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
Log.d("text to speech", "init");
...
}
});
}
顺便说一句,尝试遵循约定,Java中的类应该以大写字母开头。它也是一项活动,因此您应该在最后添加Activity
(TextToSpeechActivity
将是一个好名字)。看着你的代码,我有点困惑。