尝试在setOnUtteranceProgressListener内部调用Toaster或Custom函数 [英] Trying to call Toaster or Custom function inside setOnUtteranceProgressListener

查看:250
本文介绍了尝试在setOnUtteranceProgressListener内部调用Toaster或Custom函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的主要Fragment中,我实现了TextToSpeech mainFragment extends Fragment implements TextToSpeech.OnInitListener.

In my main Fragment, I have implemented TextToSpeech mainFragment extends Fragment implements TextToSpeech.OnInitListener.

文字语音转换正常,我还添加了UtteranceProgressListener.

The text to speech is working fine, also i have added an UtteranceProgressListener which is working.

我的问题: 无法调用任何自定义函数,例如gotoNextChapter()甚至简单的Toaster. 出现错误Can't create handler inside thread that has not called Looper.prepare()

My problem : Am unable to call any custom functions eg gotoNextChapter() or even a simple Toaster. getting error Can't create handler inside thread that has not called Looper.prepare()

欢迎任何建议或解决方案....

Any suggestions or solutions welcomed....

我的代码段:

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)

推荐答案

好,我有一个解决方案,现在我的问题似乎微不足道

ok I got a solution, now my question just seems trivial

我更新的代码如下:

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

在这里感谢这些家伙: 如何在文本后敬酒to Speech完成讲Android >何时需要在android应用程序中使用runOnUiThread?

Thanks to these guyes here: How can I Toast after Text to Speech finish speaking Android and When may we need to use runOnUiThread in android application?

这篇关于尝试在setOnUtteranceProgressListener内部调用Toaster或Custom函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆