java - 文字转语音时出错 : "Only the original thread that created a view hierarchy can touch its views."

标签 java android

我得到了“只有创建 View 层次结构的原始线程才能触及它的 View ”。因为我在使用“onUtteranceCompleted”时使用了文本转语音,并在内部对 TextView 进行了一些调用。

这是我的一些代码:

public class MyActivity extends Activity implements OnInitListener, OnUtteranceCompletedListener {

private TextView txtCurrentWord;

public void onCreate(Bundle savedInstanceState) {
    ...
    this.txtCurrentWord = (TextView) findViewById(R.id.txtCurrentWord);
}

public void onUtteranceCompleted(String uttId) {
    this.txtCurrentWord.setText("hello world");
}

}

有人知道如何避免这个错误吗?

谢谢

最佳答案

这里有一个可能适合您的解决方案:

private Handler viewHandler;

public void onCreate(Bundle savedInstanceState) {
   ...
   viewHandler = new Handler();
   ...

...

public void onUtteranceCompleted(String uttId) {
    Runnable run = new Runnable() {
        public void run() {
            txtCurrentWord.setText("hello world");
        }
    };
    viewHandler.post(run);
}

因此您保证您的 View 被原始线程所触及。

关于java - 文字转语音时出错 : "Only the original thread that created a view hierarchy can touch its views.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353326/

相关文章:

java - 如何从内存中的 Derby 数据库表中选择数据?

java - 在非静态方法内调用没有类实例的非静态方法

java - org.apache.catalina.LifecycleException : Failed to start component [StandardEngine[Catalina]. StandardHost[localhost]]

android - 从 Bottom Sheet 对话框 fragment 中获取值(value)

android - 属性引用过多警告。可能的原因?

java - Wildfly - 模块 - 确定包和依赖信息的 'proper' 方法是什么?

java - 将 byte[] 转换为 ArrayList<Object>

java - 日期和 GregorianCalendar 毫秒处理

android - 如何将旧数据从 DataAPI 同步到可穿戴设备

java - 将 .mp3 文件设置为资源中的铃声