Android TextToSpeech显示空指针异常?
我正在TextToSpeech上创建一个应用程序。但当我试图运行时,它会在下面一行抛出异常Android TextToSpeech显示空指针异常?,android,nullpointerexception,text-to-speech,Android,Nullpointerexception,Text To Speech,我正在TextToSpeech上创建一个应用程序。但当我试图运行时,它会在下面一行抛出异常 tts.speak(ruleOne, TextToSpeech.QUEUE_ADD, null); 请给我任何提示。我不明白我的代码出了什么问题。当我编译代码时,所有值都正确传递,但当它跳转到tts对象上方时,它遇到了空指针异常。是否有语法错误?哪个方法首先调用onCreate()或onActivityResult? 提前谢谢 这里是Logcat的内容 04-10 13:58:34.082: WARN
tts.speak(ruleOne, TextToSpeech.QUEUE_ADD, null);
请给我任何提示。我不明白我的代码出了什么问题。当我编译代码时,所有值都正确传递,但当它跳转到tts对象上方时,它遇到了空指针异常。是否有语法错误?哪个方法首先调用onCreate()或onActivityResult? 提前谢谢 这里是Logcat的内容
04-10 13:58:34.082: WARN/System.err(19352): java.lang.NullPointerException
04-10 13:58:34.082: WARN/System.err(19352): at com.example.examguide.ExamRulesActivity.onCreate(ExamRulesActivity.java:60)
04-10 13:58:34.082: WARN/System.err(19352): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-10 13:58:34.092: WARN/System.err(19352): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-10 13:58:34.092: WARN/System.err(19352): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-10 13:58:34.092: WARN/System.err(19352): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-10 13:58:34.092: WARN/System.err(19352): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-10 13:58:34.092: WARN/System.err(19352): at android.os.Handler.dispatchMessage(Handler.java:99)
04-10 13:58:34.092: WARN/System.err(19352): at android.os.Looper.loop(Looper.java:123)
04-10 13:58:34.092: WARN/System.err(19352): at android.app.ActivityThread.main(ActivityThread.java:3683)
04-10 13:58:34.102: WARN/System.err(19352): at java.lang.reflect.Method.invokeNative(Native Method)
04-10 13:58:34.102: WARN/System.err(19352): at java.lang.reflect.Method.invoke(Method.java:507)
04-10 13:58:34.102: WARN/System.err(19352): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-10 13:58:34.102: WARN/System.err(19352): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-10 13:58:34.102: WARN/System.err(19352): at dalvik.system.NativeStart.main(Native Method)
onCreate不是在onActivityResult之前运行吗 因此,您的tts对象将为空。在调用tts之前,添加额外代码以检查tts是否为空。speakwrite
tts = new TextToSpeech(this, this);
在onCreate()方法中的if循环中。正如Dhruvisha和andy boot所建议的那样,nullpointer异常是明显的,因为
onCreate
是在onActivityResult之前执行的。我的建议是在检查后将所有使用tts
的代码带到程序中。以下是我的建议代码:
@Override
public void onCreate(Bundle me)
{
super.onCreate(me);
setContentView(R.layout.examrules);
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
tts = new TextToSpeech(this, this);
this.speak();
}
else {
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
//tts.isLanguageAvailable(Locale.INDIA_HINDI);
startActivity(installIntent);
}
}
}
@Override
public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
// tts.setLanguage(Locale.US);
Locale loc = new Locale ("IN", "en");
tts.setLanguage(loc);
Toast.makeText(ExamRulesActivity.this,
"Text-To-Speech engine is initialized", Toast.LENGTH_LONG).show();
}
else if (status == TextToSpeech.ERROR)
{
Toast.makeText(ExamRulesActivity.this,
"Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
}
}
public void speak() {
int isVoiceEnabled=bundle.getInt("isVoiceEnabled");
setResult(RESULT_OK, intent);
if(isVoiceEnabled==1)
{
String ruleOne="hi.";
String ruleTwo= "How are you";
String ruleThree= "will you meet e=me?";
String ruleFour= " No,Ok";
if (ruleOne!=null && ruleOne.length()>0)
{
tts.speak(ruleOne, TextToSpeech.QUEUE_ADD, null);
tts.speak(ruleTwo, TextToSpeech.QUEUE_ADD, null);
tts.speak(ruleThree, TextToSpeech.QUEUE_ADD, null);
tts.speak(ruleFour, TextToSpeech.QUEUE_ADD, null);
}
}
}
}
你只需要复制这行
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
然后在编写setContentView()之后立即编写
这是因为在使用TextToSpeach
对象执行任何操作之前,您需要检查数据是否已安装
因此,代码中的错误是,您在示例中编写了所有新的内容,而示例是在intent
调用之前编写的。请发布完整的堆栈跟踪。@LukasKnuth这里我添加了Logcat