2012-01-18 15 views
1

テキスト読み上げを使用しようとしましたが、nullpointerexceptionを取得しようとしました。テキストinit.whatを使用しているテキストビューが多数あります。このtextviewsのクリックは、text-to-speechよりも、その特定のtextview.Followingにあるテキストを話します。私のクラスのコードは、text-to-speechを処理します。 nullpointerexception.Please私に何を間違っているか教えてください!ありがとうございました。非アクティビティクラスからテキストを読み上げることができません

マイTextSpeakerクラス:

public class TextSpeaker implements OnInitListener{ 

TextToSpeech tts; 
public TextSpeaker(Context c,OnInitListener listener){ 
    tts = new TextToSpeech(c,listener); //Getting NullPointerException here 
} 

@Override 
public void onInit(int status) { 
    if(status != TextToSpeech.ERROR){ 
     tts.setLanguage(Locale.US); 
    } 

} 

}

マイTextViewClickクラス:

public class TextViewClick implements OnClickListener{ 
public String textHolder; 
Context c; 
TextToSpeech.OnInitListener listener; 
TextSpeaker tts1 = new TextSpeaker(c,listener); //Getting NullPointerException here 
@Override 
public void onClick(View v) { 
    TextView tv=(TextView) v; 
    tv.setTextColor(R.color.red); 
    textHolder = (String) tv.getText(); 
    System.out.println(textHolder); 
    tts1.tts.speak(textHolder, TextToSpeech.QUEUE_FLUSH, null); 

} 

}

マイlogcatメッセージ:

01-18 13:59:20.017: E/AndroidRuntime(323): FATAL EXCEPTION: main 
01-18 13:59:20.017: E/AndroidRuntime(323): java.lang.NullPointerException 
01-18 13:59:20.017: E/AndroidRuntime(323): at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:407) 
01-18 13:59:20.017: E/AndroidRuntime(323): at blah.blah.com.TextSpeaker.<init>(TextSpeaker.java:13) 
01-18 13:59:20.017: E/AndroidRuntime(323): at independent.vervecoders.com.TextViewClick.<init>(TextViewClick.java:13) 
01-18 13:59:20.017: E/AndroidRuntime(323): at independent.vervecoders.com.Independent.onClick(Independent.java:86) 
01-18 13:59:20.017: E/AndroidRuntime(323): at android.view.View.performClick(View.java:2408) 
01-18 13:59:20.017: E/AndroidRuntime(323): at android.view.View$PerformClick.run(View.java:8816) 
01-18 13:59:20.017: E/AndroidRuntime(323): at android.os.Handler.handleCallback(Handler.java:587) 
01-18 13:59:20.017: E/AndroidRuntime(323): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-18 13:59:20.017: E/AndroidRuntime(323): at android.os.Looper.loop(Looper.java:123) 
01-18 13:59:20.017: E/AndroidRuntime(323): at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-18 13:59:20.017: E/AndroidRuntime(323): at java.lang.reflect.Method.invokeNative(Native Method) 
01-18 13:59:20.017: E/AndroidRuntime(323): at java.lang.reflect.Method.invoke(Method.java:521) 
01-18 13:59:20.017: E/AndroidRuntime(323): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-18 13:59:20.017: E/AndroidRuntime(323): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-18 13:59:20.017: E/AndroidRuntime(323): at dalvik.system.NativeStart.main(Native Method) 
+0

携帯電話の設定でテキストをスピーチしましたか? – harbinja

答えて

2

あなたのコンテキストは決して初期化されていないようです。 TextSpeakerのコンストラクタを呼び出す前に、コンテキストを初期化してください。

また、onInitListenerを渡す必要もなく、TextSpeakerはすでにOnInitListenerです。

public class TextViewClick implements OnClickListener 
{ 
    public String textHolder; 

    public TextViewClick(Context c) 
    { 
    TextSpeaker tts1 = new TextSpeaker(c); 
    } 

    @Override 
    public void onClick(View v) 
    { 
    TextView tv=(TextView) v; 
    tv.setTextColor(R.color.red); 
    textHolder = (String) tv.getText(); 
    System.out.println(textHolder); 
    tts1.tts.speak(textHolder, TextToSpeech.QUEUE_FLUSH, null); 
    } 
} 

そして、あなたのTextSpeakerも同様に変更します:あなたは、あなたのTextViewClickでこれを試すことができます。また

public class TextSpeaker implements OnInitListener 
{ 
    TextToSpeech tts; 

    public TextSpeaker(Context c) 
    { 
    tts = new TextToSpeech(c, this); 
    } 

    @Override 
    public void onInit(int status) { 
    if(status != TextToSpeech.ERROR){ 
     tts.setLanguage(Locale.US); 
    } 
    } 
} 

を、あなたがお使いのデバイスの設定でTTSを有効にしていることを確認してください。

+0

お返事ありがとうございました! – Viking

関連する問題