2014-01-23 52 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