2017-03-25 6 views
2

私のメインの断片では、私はTextToSpeech mainFragment extends Fragment implements TextToSpeech.OnInitListenerを実装しました。setOnUtteranceProgressListenerの中でトースターやカスタム関数を呼び出そうとしています

スピーチテキストはうまく機能しています。また、私はUtteranceProgressListenerを追加しました。

私の問題: カスタム機能を呼び出すことができません。例えば、gotoNextChapter()または簡単なToasterです。 取得中にエラーCan't create handler inside thread that has not called Looper.prepare()

任意の提案や歓迎のソリューション....

マイコードスニペット:

UtteranceProgressListener SpeechListener = new UtteranceProgressListener() { 
      @Override 
      public void onStart(String utteranceId) { 
       Toast.makeText(getActivity(),utteranceId, Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onDone(String utteranceId) { 
       Toast.makeText(getActivity(),utteranceId, Toast.LENGTH_LONG).show(); 

       gotoNextChapter(); <====function I want to call 
       read_mode = 0; 
      } 

      @Override 
      public void onError(String utteranceId) { 
       Toast.makeText(getActivity(),utteranceId, Toast.LENGTH_LONG).show(); 
      } 
     }; 

発話完全なリスナーの設定:

myTTS.setOnUtteranceProgressListener(SpeechListener); 

エラーが取得しています:

Caught a RuntimeException from the binder stub implementation. 
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
                  at 
android.os.Handler.<init>(Handler.java:209) 
                  at 
android.os.Handler.<init>(Handler.java:123) 
                  at 
android.widget.Toast$TN.<init>(Toast.java:350) 
                  at 
android.widget.Toast.<init>(Toast.java:106) 
                  at 
android.widget.Toast.makeText(Toast.java:264) 
                  at com.MainActivity$Read$10.onDone(MainActivity.java:1252) 

答えて

1

@Override 
public void onDone(String utteranceId) { 

runOnUiThread(new Runnable() { 

       public void run() { 
        Toast.makeText(getContext(),utteranceId,Toast.LENGTH_LONG).show(); 
gotoNextChapter(); <====function I want to call 
read_mode = 0; 
       } 
      }); 
} 

、ここでこれらのguyesのおかげで活動中:

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     Toast.makeText(getActivity(),"...", Toast.LENGTH_LONG).show(); 
    } 
}); 

あなたがフラグメントである場合:

Handler mainHandler = new Handler(context.getMainLooper()); 

Runnable myRunnable = new Runnable() { 
    @Override 
    public void run() { 
     Toast.makeText(getActivity(),"...", Toast.LENGTH_LONG).show(); 
    } 
}; 
mainHandler.post(myRunnable); 

getActivity().runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     Toast.makeText(getActivity(),"...", Toast.LENGTH_LONG).show();   
    } 
}); 
エルス

あなたがこれを行うことができます

関連する問題