文本到语音构造函数崩溃应用程序android

时间:2013-06-23 14:03:22

标签: java android text-to-speech

在我的应用中,我正在使用片段和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);
}

此致

1 个答案:

答案 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中的类应该以大写字母开头。它也是一项活动,因此您应该在最后添加ActivityTextToSpeechActivity将是一个好名字)。看着你的代码,我有点困惑。