有一个TextView显示由另一个Thread android设置的文本

时间:2012-09-09 19:01:55

标签: android synchronization textview

我有一些使用地理编码器获取地址的工作线程,当它完成后,我想在应用程序线程的TextView上显示结果,使用来自工作线程的setText()导致异常,那么什么是这样做的最佳做法是什么?

3 个答案:

答案 0 :(得分:1)

在您要设置文本的线程中尝试此操作:

    // you should finalize your text before using it in another thread, 
    // else the IDE would show an error
    final String text = yourTextToBeSet;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            textView.setText(text);
        }
    });

在非UI线程上调用setText()时获得的异常是因为当您在非UI线程上时无法调用与UI相关的任何内容。如上所述,您可以轻松调用runOnUiThread(Runnable)来转移UI线程上的代码执行。

请注意,如果您的代码不那么简单,那么这个解决方案就不够了,在这种情况下,建议使用AsyncTask

答案 1 :(得分:1)

不得从外部线程触及Android UI视图。任何调用Views on Views的代码都必须仅在UI线程中运行。你应该使用AsyncTask。它提供了有用的回调方法,可以在单独的线程中运行任务来更新UI。

答案 2 :(得分:1)

如果没有看到您的代码或知道什么是异常,很难说:

但请检查:

  • 你的textView对象与布局中的对象链接(findViewById(R.id.textView1))
  • 在你的布局中是否可见?(有时当元素的尺寸没有加起来时,视图会被推离屏幕)
  • 你真的想要设置一个String吗? (不是一个int左右?)