2014-01-23 45 views
0

所以我试图实现文本到语音到我的应用程序有史以来第一次。讲话被调用时,我仍然会有一个错误的想法。下面是我收到的日志:文本到语音产生错误

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

...

bt.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
        if (btTimer.getText().toString().contains(":50")){ 
         cd[0].start(); 
         speak.speakOut(); 

        } else { 
         cd[0].cancel(); 
         cd[0].onFinish(); 
        } 

       } 
      }); 

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

编辑:我也曾尝试QUEUE_ADD而不是QUEUE_FLUSH并没有工作之一:您创建的speakActivity活动/

回答

2

,但你已经发布的代码你从来没有开始活动。由于该活动从未开始,因此从未调用onCreate(),因此tts未初始化。这就是为什么你得到一个NullPointerException,当你在speakOut()调用

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

更多信息请参阅有关何时onCreate()被称为这个计算器的问题:Is onCreate called when an Activity object is created?

+0

谢谢你,这是非常有益实际上,我认为它终于点击的意图做什么。但是,我应该startActivity(意向)在第一次活动的onCreate? – Rob

+0

从我看到的代码看起来像你想要这个代码被称为当用户点击应用程序的权利按钮?所以你想在用户点击按钮时开始活动。查看本教程中的“在Android中启动活动”。我认为这是一个很好,更彻底的例子,说明你想做什么,我可以解释。 http://developer.android.com/training/basics/firstapp/starting-activity.html – mdewitt