Java 文语转换错误

Java 文语转换错误,java,android,text-to-speech,Java,Android,Text To Speech,所以我第一次尝试在我的应用程序中实现文本到语音的转换。当演讲被调用时,我仍然会有一个错误的想法。这是我得到的日志: 01-23 18:52:29.825: E/AndroidRuntime(24380): FATAL EXCEPTION: main 01-23 18:52:29.825: E/AndroidRuntime(24380): Process: com.rcd.league, PID: 24380 01-23 18:52:29.825: E/AndroidRuntime(24380):

所以我第一次尝试在我的应用程序中实现文本到语音的转换。当演讲被调用时,我仍然会有一个错误的想法。这是我得到的日志:

01-23 18:52:29.825: E/AndroidRuntime(24380): FATAL EXCEPTION: main
01-23 18:52:29.825: E/AndroidRuntime(24380): Process: com.rcd.league, PID: 24380
01-23 18:52:29.825: E/AndroidRuntime(24380): java.lang.NullPointerException
01-23 18:52:29.825: E/AndroidRuntime(24380):    at com.rcd.league.speakActivity.speakOut(speakActivity.java:60)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at com.rcd.league.spawnTimers$15.onClick(Timers.java:350)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at android.view.View.performClick(View.java:4442)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at android.view.View$PerformClick.run(View.java:18423)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at android.os.Handler.handleCallback(Handler.java:733)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at android.os.Looper.loop(Looper.java:137)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at android.app.ActivityThread.main(ActivityThread.java:5083)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at java.lang.reflect.Method.invokeNative(Native Method)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at java.lang.reflect.Method.invoke(Method.java:515)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
01-23 18:52:29.825: E/AndroidRuntime(24380):    at dalvik.system.NativeStart.main(Native Method)
这是我的密码:

package com.rcd.league;

import java.util.Locale;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;

public class speakActivity extends Activity  implements TextToSpeech.OnInitListener {

    private int MY_DATA_CHECK_CODE = 0;
    private TextToSpeech tts;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent checkTTSIntent = new Intent();
        checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE);
        tts = new TextToSpeech(this, this);
    }

    @Override
    public void onDestroy() {
        // Don't forget to shutdown tts!
        if (tts != null) {
            tts.stop();
            tts.shutdown();
        }
        super.onDestroy();
    }

    @Override
    public void onInit(int status) {

        if (status == TextToSpeech.SUCCESS) {

            int result = tts.setLanguage(Locale.US);

            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "This Language is not supported");
            } else {
                speakOut();
            }

        } else {
            Log.e("TTS", "Initilization Failed!");
        }

    }

    public void speakOut() {

        String text = "test";

        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    }



}
我叫speakOut();从另一个活动中。以下是该代码的片段:

speakActivity speak = new speakActivity();

任何帮助都将不胜感激! 谢谢


编辑:我也尝试了QUEUE\u ADD而不是QUEUE\u FLUSH,这也不起作用://

您创建了
speakActivity
活动,但在您发布的代码中,您从未启动过该活动。由于活动从未启动,
onCreate()
从未被调用,因此未初始化
tts
。这就是为什么调用时会出现
NullPointerException

tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
speakOut()


有关何时调用
onCreate()
的更多信息,请参见此stackoverflow问题:

谢谢,这非常有帮助,实际上,我认为它终于单击了意图的作用。。但是,我是否应该在第一个活动的onCreate中启动触觉(intent)?从代码中我看到,您似乎希望在用户单击应用程序右侧的按钮时调用此代码?因此,您希望在用户单击按钮时启动该活动。请看本教程,了解如何在android中启动活动。我认为这是一个很好的,更彻底的例子,我可以解释你想做什么。
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);