Java 文本到语音构造器使android应用程序崩溃

Java 文本到语音构造器使android应用程序崩溃,java,android,text-to-speech,Java,Android,Text To Speech,在我的应用程序中,我使用片段和viewpager。我有一个单独的文本到语音的类,它扩展了活动,但没有布局。我在FragmentAdapter类中实例化了这个类,它根据屏幕上当前的活动调用speaks函数。但是,文本到语音构造器导致应用程序崩溃,导致强制关闭。虽然我同时使用了getApplicationContext()和className,但我发现文本到语音构造函数中的罪魁祸首是上下文。这仍然会使应用程序崩溃。代码如下: public class textToSpeech extends Act

在我的应用程序中,我使用片段和viewpager。我有一个单独的文本到语音的类,它扩展了活动,但没有布局。我在FragmentAdapter类中实例化了这个类,它根据屏幕上当前的活动调用speaks函数。但是,文本到语音构造器导致应用程序崩溃,导致强制关闭。虽然我同时使用了getApplicationContext()和className,但我发现文本到语音构造函数中的罪魁祸首是上下文。这仍然会使应用程序崩溃。代码如下:

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);
}

这是因为您将代码放入活动构造函数中,但活动仍未初始化。在创建时将代码移入
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中的类应该以大写字母开头。这也是一项活动,因此您应该在末尾添加
活动
TextToSpeechActivity
将是一个好名字)。查看您的代码时,我有点困惑。

我在FragmentAdapter扩展类中实例化了上述类。如果我把上面的代码放在onCreate中,我必须用startActivity启动活动,这在非活动类中是做不到的。所以它从
活动
扩展而来,但它不是活动?如果不是从
startActivity()
开始,则仅从
Activity
扩展以获取上下文是不起作用的。你必须重新考虑你的设计。那我能做什么呢?我想要的是,当用户滑动时片段发生变化时,textToSpeech根据该片段说出文本。为此,我创建了字符串数组,并将字符串传递给上面提到的textTospeech类方法。即使我使用startActivity启动此活动,textToSpeech类的oncreate方法也不会被调用。我在manifest.xml中定义了此活动,并创建了高度和宽度为0dp的布局。现在有什么问题?