0

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

4

3 回答 3

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

于 2012-09-09T19:11:05.787 回答
1

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

于 2012-09-09T19:13:15.380 回答
1

如果不查看您的代码或不知道什么异常,很难说:

但检查是否:

  • 您的 textView 对象与布局中的对象链接(findViewById(R.id.textView1))
  • 它在你的布局中可见吗?(有时当元素的尺寸不相加时,视图被推离屏幕)
  • 它真的是您要设置的字符串吗?(不是 int 左右?)
于 2012-09-09T19:24:18.797 回答