TextToSpeech muestra Null Pointer Exception?

Estoy creando una aplicación en TextToSpeech. Pero cuando estoy tratando de ejecutar, lanzar excepción en la línea siguiente.

tts.speak(ruleOne, TextToSpeech.QUEUE_ADD, null); 

Aquí está mi código completo para referencia
Por favor, dame cualquier pista. No entiendo qué malo en mi código. Cuando compile mi código todo el valor pasa correctamente pero cuando salta encima de tts el objeto golpeó la excepción del puntero nulo. Qué sintaxis es incorrecta? ¿Qué método llaman primero onCreate () o onActivityResult? Gracias por adelantado

Aquí está el contenido de 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) 

escribir

 tts = new TextToSpeech(this, this); 

En su bucle if en el método onCreate ().

Como Dhruvisha y andy boot sugirió, la NullPointerException es obvia porque onCreate se ejecuta antes de onActivityResult . Mi sugerencia es traer todo su código que utiliza tts a un procedimiento después de la comprobación. Aquí está mi código sugerido:

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

¿No se ejecuta onCreate antes de onActivityResult ?

Por lo tanto su objeto tts será nulo. Agregar código adicional para comprobar tts no es nulo antes de llamar a tts.speak

Sólo tienes que copiar estas líneas

 Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

Y escribir a continuación, después de escribir setContentView()

Eso porque antes de hacer algo con el objeto TextToSpeach debe comprobar que los datos están instalados o no.

Así que el error en el código es que escribió todo lo nuevo en ese example que lo escribió antes de la llamada de intent .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.